|
|
1
3
实施由于这是静态多态性,奇怪的递归模板模式可能比交换一个cpp文件更为惯用——这看起来相当老套。如果您想让多个实现在一个项目中共存,同时易于与强制的单一实现构建系统一起使用,那么CRTP似乎是必需的。我想说,它有很好的文档记录,并且能够做到这两者(因为你永远不知道以后会需要什么),这使它具有优势。 简而言之,CRTP看起来有点像这样:
(我之前在派生实现函数前面加了
要了解CRTP中真正发生的事情-一旦你了解了就很简单了!-周围有很多向导。你可能会发现这方面有很多变化,并选择你最喜欢的一个。 编制实施时间选择回到另一个方面,如果您确实想在编译时限制到某个实现,那么可以使用一些预处理器宏来强制派生类型,例如:
以及以后
您可以在单个标题中声明所有Car变量
|
|
|
2
3
在编译时选择.cpp文件是可以的,而且非常合理。。。 如果 被忽略的.cpp文件将无法编译。这是选择特定于平台的实现的一种方式。 但一般来说,如果可能的话(比如在你的小例子中),最好使用模板来实现静态多态性。如果需要在编译时做出选择,请使用预处理器宏。 如果两个实现 指不应交叉的单独项目 但仍然是 给定接口的实现 ,我建议将该接口提取为单独的“项目”。这样,单独的项目彼此之间没有直接的关系,尽管它们都依赖于提供接口的第三个项目。 |
|
|
3
0
在您的用例中,我认为最好使用 条件编译 -块。这将在编译之前进行检查!此方法有时也用于区分相同代码的不同平台。
在这些代码中,编译器将忽略 条件编译 -因为只定义了FERRARI。这样,你仍然可以使用你想要的两辆车的方法。你想要的一切都不一样,你可以放入ifdefs并简单地交换定义。
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |