CRTP层次结构类的非模板基类
Non-template base class for CRTP hierarcy class
考虑以下具有CRTP的类层次结构:
template <class T>
struct BaseClass {
void foo_interface(int a) {
static_cast<T*>(this)->foo(a);
}
};
struct SubClass1 : public BaseClass<SubClass1> {
void foo(int a) { std::cout << "SubClass1n"; }
};
struct SubClass2 : public BaseClass<SubClass2> {
void foo(int a) { std::cout << "SubClass2n"; }
};
int main(int argc, char* argv[]) {
BaseClass<SubClass1>* b1 = new SubClass1();
BaseClass<SubClass2>* b2 = new SubClass2();
b1->foo_interface(3); // Print "SubClass1"
b2->foo_interface(4); // Print "SubClass2"
delete b1;
delete b2;
}
我需要创建一个基类的SuperClass来获得相同的行为,但方式如下(我必须迭代对象的集合并调用此方法):
int main(int argc, char* argv[]) {
SuperClass* b1 = new SubClass1();
SuperClass* b2 = new SubClass2();
b1->foo_interface(3); // Print "SubClass1"
b2->foo_interface(4); // Print "SubClass2"
delete b1;
delete b2;
}
有可能吗?我不能使用虚拟方法,我尽量避免函数指针。方法foo_interface也可以在所有类的外部定义。这些方法必须调用很多次,因此出于性能原因,我不能使用switch/if构造。
如果没有运行时调度(您已经禁止了),就无法拥有运行时接口。因此,你不可能做你想做的事。如果您想要一个运行时接口,您需要通过函数指针或虚拟函数进行运行时调度。
您还可以考虑将不同的子类放在不同的集合中。
相关文章:
- 如何重构类层次结构以避免菱形问题
- C++ 中模板化类型的类层次结构
- C++ 类层次结构中的"对齐"是什么意思?
- 类层次结构中的运算符重载
- C++ 提升 - 包含类层次结构对象的类的序列化
- 模板冲突的类型-但类型应该是相同的cfr类层次结构
- 访客设计模式和多层类层次结构
- C++要在其中添加接口功能的类层次结构
- 无法使用"enable_if"和"is_base_of"将模板函数"operator+"的重载限制到我的类层次结构
- 在类层次结构中覆盖C++
- 如何在 C++1x 中为类层次结构实现完全通用的访问者?
- 是否可以将基类的结构分配给派生类的结构
- 如何调用遍历类层次结构的成员函数
- 沿类层次结构的私人继承,为什么在整个层次结构中都需要朋友
- 具有向下强制转换函数指针的类层次结构
- Arduino类层次结构,字符串和内存泄漏
- 类层次结构设计,避免从基类到派生类的向下转换
- C++-几何基元类层次结构
- 是否可以为模板化的基类提供专门的类层次结构,但仍利用它们之间的多态性
- 调用模板虚类层次结构中的基类方法