在使用CRTP时,C ++ 11/14/17中是否有办法访问父类中的子类成员?
template <typename T>
class A {
public:
using C = typename std::result_of<decltype(&T::next)(T)>::type;
};
class B : A<B> {
public:
int next() { ... };
};
这会导致A<B>::C
和B::C
成为int
。
答案 0 :(得分:9)
不,我担心这是不可能的。当A<B>
用作基类时,必须将其实例化(因为基类必须完整),但此时B
仍然是不完整的类型,因此无法在A<B>
内访问它{1}}。