【发布时间】:2016-06-23 03:38:58
【问题描述】:
在下面的示例中,我有一个非常典型的 CRTP 示例,两个不同的派生类都有一个方法 bar。基类有一个方法foo,它只是转发给一些派生的bar方法
#include <iostream>
template<typename Derived>
class Base {
public:
void foo() {
static_cast<Derived*>(this)->bar();
}
};
class DerivedA : public Base<DerivedA> {
public:
void bar() {
::std::cout << "A\n";
}
};
class DerivedB : public Base<DerivedB> {
public:
void bar() {
::std::cout << "B\n";
}
};
int main() {
DerivedA a;
DerivedB b;
a.foo();
b.foo();
}
似乎我不能拥有基类的数组/向量等,因为它必须具有类似于 Base<T> 的类型,其中 T 不同
是否存在某种没有virtual 的约定,以便能够迭代不同的派生类,假设它们都具有相同的方法(在这种情况下为bar)?
【问题讨论】: