热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从不同的基类继承类模板特化是否合法?

如何解决《从不同的基类继承类模板特化是否合法?》经验,为你挑选了1个好方法。

我遇到过一种情况,我的类模板部分特化分享了很多代码,将它移到基类中是有意义的.但是,对于具有相同基类的所有特化,没有意义.

以下示例代码在GCC 7.1中编译而没有错误:

struct foo_base_1 { void bar() { std::cout <<"base 1" <
struct foo { };

template 
struct foo : foo_base_1 { };

template 
struct foo : foo_base_2 { };

int main()
{
    foo x;
    foo y;

    x.bar();
    y.bar();
}

我意识到,尽管是同一类的专业,但它们实际上是不同的类型.不过,这感觉不对,同样的类可以从不同的基础继承.

我想要的是一些保证,这是可以的.我找不到标准的相关部分,我不愿意相信它只是因为它编译(我以前被咬过).



1> Aconcagua..:

每个模板实例化都是它自己的独立类.就像任何普通的类都可以从你想要的任何基类继承一样,模板实例化也可以这样做.请考虑以下示例:

template 
class Derived : public Base
{
};

绝对合法......

例如,这是奇怪的重复模板模式的基础.

如果你现在决定以不同的方式实现特定的实例化(因此你是专门的;或者是部分的,然后是部分的)而不是原始/主模板模式.

该标准似乎有点简短:

17.5.1类模板[temp.class]
1类模板定义无限组相关类型的布局和操作.
2 [示例:单个类模板List可能提供无限的类定义集:每个类型T的一个类List,每个类描述类型T的元素的链接列表.类似地,描述连续动态数组的类模板Array可能定义如下:[some sample template declaration]前缀模板指定声明模板,并且声明中可以使用类型名称T. 换句话说,Array是一个参数化类型,以T为参数. - 结束例子]

[由我强调],但在定义类型特征时稍后使用相同的模式:

23.15.3助手类[meta.help]
[integral_constant的定义]
1类模板integral_constant,别名模板bool_constant及其关联的typedef-names true_type和false_type用作基类,以定义各种类型特征的接口.

随后,该标准使用"具有基本特征"的措辞,如:

23.15.4一元类型特征[meta.unary]
1 本子条款包含可用于在编译时查询类型属性的模板.
2如果相应条件为真,则每个模板都应为UnaryTypeTrait(23.15.1),其基本特征为true_type,否则为false_type.

与之前的引用一起,我们可以得出结论,根据所满足的条件,从任何一个true_typefalse_type有选择地继承是至少合法的.很难说,如果这一措词甚至强制执行这种继承,或者如果它是合法的,以及定义模板,使得他们只表现一样true_type,并false_type没有从明确继承(这是另一回事,但...).

当然,不是权威的,我个人倾向于前面的解释,因为前面的"被用作"(与"可以用作"相反).


推荐阅读
  • 数据结构-图详解(图基本概念、图的存储结构及C++实现)
    本文主要介绍关于数据结构,c++,图论的知识点,对【数据结构-图详解(图基本概念、图的存储结构及C++实现)】和【数据结构图的存储结构代码】有兴趣的朋友可以看下由【NUC_Dodamce】投稿的技术文 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • AtonepointIhadlookedatimplementingaclasstemplateinC++thatwouldsupportanEnumthatwo ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 深入解析Linux下的I/O多路转接epoll技术
    本文深入解析了Linux下的I/O多路转接epoll技术,介绍了select和poll函数的问题,以及epoll函数的设计和优点。同时讲解了epoll函数的使用方法,包括epoll_create和epoll_ctl两个系统调用。 ... [详细]
  • [置顶]        C++类的构造函数与析构函数的调用顺序
    1构造函数的调用顺序[1]构造函数按此顺序执行工作:按声明顺序调用基类和成员构造函数。如果类派生自虚拟基类,则会将对象的虚拟基指针初始化。如果类具有或继承了虚函数,则会将对象的虚函数指针初始化。 ... [详细]
  • Igotthiscode(IknowitsinSpanishIcantranslateifneeded)wheretheygivemethefunctionS ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
author-avatar
今日屎汰濃
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有