C++核心准则T.62:将非依赖类模板成员放入非模板基类中

news/2024/7/5 20:02:05

T.62: Place non-dependent class template members in a non-templated base class

T.62:将非依赖类模板成员放入非模板基类中

 

Reason(原因)

Allow the base class members to be used without specifying template arguments and without template instantiation.

允许在不定义模板参数和不例示模板的情况下使用基类成员。

 

Example(示例)

template<typename T>
class Foo {
public:
    enum { v1, v2 };
    // ...
};

???

struct Foo_base {
    enum { v1, v2 };
    // ...
};

template<typename T>
class Foo : public Foo_base {
public:
    // ...
};

Note(注意)

A more general version of this rule would be "If a class template member depends on only N template parameters out of M, place it in a base class with only N parameters." For N == 1, we have a choice of a base class of a class in the surrounding scope as in T.61.

??? What about constants? class statics?

本规则的更普遍版是:如果模板类成员只依赖于M以外的N个模板参数,将其放入只包含N个参数的基类中。对于N==1的情况,我们可以选择外围作用域的某个类的基类,就像T.61那样。

???常量该如何处理?静态成员呢?

 

Enforcement(实施建议)

  • Flag ???

  • 标记 ???

     

原文链接

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#t62-place-non-dependent-class-template-members-in-a-non-templated-base-class

 

新书介绍

《实战Python设计模式》是作者最近出版的新书,拜托多多关注!

本书利用Python 的标准GUI 工具包tkinter,通过可执行的示例对23 个设计模式逐个进行说明。这样一方面可以使读者了解真实的软件开发工作中每个设计模式的运用场景和想要解决的问题;另一方面通过对这些问题的解决过程进行说明,让读者明白在编写代码时如何判断使用设计模式的利弊,并合理运用设计模式。

对设计模式感兴趣而且希望随学随用的读者通过本书可以快速跨越从理解到运用的门槛;希望学习Python GUI 编程的读者可以将本书中的示例作为设计和开发的参考;使用Python 语言进行图像分析、数据处理工作的读者可以直接以本书中的示例为基础,迅速构建自己的系统架构。

 


 

觉得本文有帮助?请分享给更多人。

关注微信公众号【面向对象思考】轻松学习每一天!

面向对象开发,面向对象思考!

 

 


http://www.niftyadmin.cn/n/1027751.html

相关文章

【C++】std::endl只是换行?

&#xff08;点击上方公众号&#xff0c;可快速关注&#xff09;前言一直用std::endl输出换行符&#xff0c;理所当然认为下面的代码等价&#xff1a;std::cout << "Hello Wolrd" << std::endl; std::cout << "Hello Wolrd" << \n…

【C++】再谈 STL reserve的坑

&#xff08;点击上方公众号&#xff0c;可快速关注&#xff09;前言之前写过一篇文章《STL reserve函数使用误区》&#xff0c;主要内容是说明一些标准模板类&#xff0c;比如&#xff0c;std::vector、std::string等&#xff0c;提供的reserve成员函数改变的是capacity&#…

C++核心准则T.64​:使用特化提供类模板的不同实现

T.64: Use specialization to provide alternative implementations of class templates T.64&#xff1a;使用特化提供类模板的不同实现 Reason&#xff08;原因&#xff09; A template defines a general interface. Specialization offers a powerful mechanism for prov…

【现代C++】自定义字面量-序:字面量(一)

&#xff08;点击上方公众号&#xff0c;可快速关注&#xff09;C11引入了自定义字面量&#xff0c;由于这个语言特性的外延较大&#xff0c;为了系统介绍它&#xff0c;先把字面量的知识补全。在看语言规范的过程中&#xff0c;的确发现了好多知识点是以前没接触过的&#xff…

【C++】巨坑-VC++的localtime_s的三宗罪

&#xff08;点击上方公众号&#xff0c;可快速关注&#xff09;前几天在运行一段代码的时候&#xff0c;发现localtime执行失败&#xff0c;由于代码没有判断返回值&#xff0c;后续对空指针操作导致段错误。所以&#xff0c;需要对该段代码增加保护判断&#xff0c;避免程序崩…

C++核心准则T.65:使用标签分发提供函数的不同实现

T.65: Use tag dispatch to provide alternative implementations of a function T.65:使用标签分发提供函数的不同实现 Reason&#xff08;原因&#xff09; A template defines a general interface. 模板定义普遍接口。 Tag dispatch allows us to select implementations…

mysql中insert into和replace into以及insert ignore用法区别

mysql中insert into和replace into以及insert ignore用法区别&#xff1a; mysql中常用的三种插入数据的语句: insert into表示插入数据&#xff0c;数据库会检查主键&#xff0c;如果出现重复会报错&#xff1b; replace into表示插入替换数据&#xff0c;需求表中有PrimaryKe…

【现代C++】类型推导与auto

&#xff08;点击上方公众号&#xff0c;可快速关注&#xff09;类型推导&#xff08;Type inference 或 Type deduction&#xff09;&#xff0c;顾名思义就是编译器能自动推导出数据类型&#xff0c;免去了显式的类型声明。Java、C#等静态语言都支持该特性&#xff0c;C也在C…