是否可以使用CRTP访问父类体内的成员?

时间:2018-04-27 15:38:09

标签: c++ templates crtp

在使用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>::CB::C成为int

1 个答案:

答案 0 :(得分:9)

不,我担心这是不可能的。当A<B>用作基类时,必须将其实例化(因为基类必须完整),但此时B仍然是不完整的类型,因此无法在A<B>内访问它{1}}。