问题标签 [crtp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 在向量中存储基于 CRTP 的类时遇到问题
我不确定这是否可以做到,我只是深入研究模板,所以也许我的理解有点错误。
我有一个士兵排,排从一个编队继承来获取编队属性,但是因为我可以拥有尽可能多的编队,所以我选择使用CRTP来创建编队,希望我可以制作一个用于存储排的向量或排数组。但是,当然,当我制作排时,它不会将其存储在向量中,“类型不相关”
有没有办法解决 ?我读到了类似的“单板”,它们与数组一起工作,但我无法让它工作,也许我错过了一些东西。
这是一些代码:(对不起格式,代码在我的帖子中,但由于某种原因没有显示)
然后我在 platoon 类中使用这些编队进行派生,以便 platoon 获取相关的 SetupFormation() 函数:
到目前为止,一切都很好,并且符合预期。
现在,由于我的将军可以有多个排,我需要存储排。
typedef 排< IFormation<> > TPlatoon; 失败,因为我需要指定一个模板参数,但指定它只会让我存储使用相同模板参数创建的排。
所以我然后创建了FormationBase
并使 IFormation 公开继承,然后将 typedef 更改为
但还是没有爱。
现在在我的搜索中,我没有找到表明这是可能或不可能的信息。
c++ - 在多文件程序中使用“奇怪重复的模板模式”
我是一个非常新手 (C++) 程序员,并且刚刚发现了 CRTP 用于记录属于特定类的对象的计数。
我是这样实现的:
这似乎有效。但是,它似乎不喜欢在一个单独的头文件中继承它,我在其中声明了这一点:
没有继承,一切都编译得很好,所以我很确定它看不到模板的声明和定义。有人对我可能出错的地方以及我能做些什么有任何建议吗?我应该在我的 Infector 定义之前使用 extern 来让编译器知道 Counter 模板或类似的东西吗?
干杯,
凯尔
c++ - CRTP 和模板化表达式
在使用模板化表达式和好奇递归模板模式 (CRTP) 的复杂库中,我需要一些重载运算符来专门用于基类,但涉及其派生类的操作找不到基类专门化。
IE:
- 如果为 BaseA< T > + BaseA< T > 定义了运算符,则代码 DerivedA< T > + DerivedA< T > 发现该运算符没有问题。
- 如果为 BaseB< T > + BaseB< T > 定义了运算符,则代码 DerivedB< T > + DerivedB< T > 发现该运算符没有问题。
- 但是如果为 BaseB< BaseA< T > > + BaseB< BaseA< T > > 定义了运算符,则 DerivedB< DerivedA< T > > + DerivedB< DerivedA< T > > 找不到该运算符。
如何确保找到专门的嵌套案例的运算符?
我可以这样重申这个问题:
如果我有课(使用 CRTP)
我有一个接线员
它很乐意用于求解函数 DerivedB< DerivedA< double >> + DerivedB< DerivedA< double> >,例如
但是如果我有一个更专业的操作员来进行相同的操作
同一函数未找到此运算符
如何确保找到专门的操作员来解决此功能?
我附上了重现问题的简化代码,只有一行 BA1+BA2; 不使用 g++ 编译。
完整代码示例:
c++ - 使用虚拟析构函数会使非虚拟函数进行 v-table 查找吗?
正是主题所要求的。还想知道为什么 CRTP 的常见示例中没有提到virtual
dtor。
编辑:伙计们,请也发布有关 CRTP 问题的信息,谢谢。
delphi - Delphi 泛型类可以从其类参数继承吗?
我一直在尝试定义一个通用的、可继承的 TSingleton 类。这是我正在进行的:
目标是能够在继承树中“插入”单例模式。所以不要声明这样的东西:
并且需要在那里实现单例模式,我会声明如下:
可悲的是,这行不通。我收到以下错误(在 D2010 中):
现在我想知道,这可以在 Delphi XE 中使用吗?是否有一些“干净的技巧”可以用来在 D2010 中完成这项工作?有一些根本原因导致这行不通吗?
c++ - 派生类作为模板参数有什么用?
这种模式的目的是什么?这叫什么?我第一次看到它时看起来很奇怪,虽然我现在已经看过很多次了。
c++ - 什么是奇怪的重复模板模式(CRTP)?
在不参考一本书的情况下,任何人都可以CRTP
通过代码示例提供一个很好的解释吗?
c++ - CRTP 失败 w/decltype
对我来说似乎很简单。但是 MSVC 无法编译。
即使编译器很乐意接受调用该函数。下面的示例编译得很好。
我在尝试使用模板参数中的任何类型时遇到了同样的问题。
而 B 类清楚地定义了一种称为“某物”的类型。编译器非常乐意在 T、T& 或 T* 类型的对象上调用函数,但我似乎无法从 T 访问任何类型。
c++ - 使用 CRTP 时如何避免错误?
有时我会使用CRTP编写如下代码:
而且很难理解出了什么问题,直到我在调试器中跟踪代码并看到 Bar 的成员没有在Base
.
如何在编译时显示此错误?
(我用的是MSVC2010,所以可以使用一些C++0x特性和MSVC语言扩展)
c++ - 这是静态多态性的 CRTP 用法,但没有实现派生函数。在 gcc 和 Visual Studio 中编译。为什么?
后续问题:如何使这种类型安全?也就是说,如果有人忘记实现方法 2,我希望编译器能够捕捉到它。我不希望它在运行时爆炸。