如何获取从基类派生的typename?

时间:2017-12-02 10:02:37

标签: c++ typedef crtp

template <class Derived>
struct Base {
  typedef typename Derived::T T;
};

template <typename T_>
struct Impl : public Base<Impl<T_>> {
  typedef T_ T;
};

初始化时,我收到错误

  

'Impl'中没有名为'T'的类型

那么,如何在派生自基类的过程中定义typename?

1 个答案:

答案 0 :(得分:0)

找到一种方法来做到这一点,虽然它并不完美,但确实有效。

template <class T>
struct traits;

template <class Derived>
struct Base {
  typedef typename traits<Derived>::T T;
};

template <typename T_>
struct Impl : public Base<Impl<T_>> {
  typedef T_ T;
};

template <typename T_>
struct traits<Impl<T_>> {
  typedef T_ T;
};

这不完美,因为在特质课上,我不能写

typedef typename Impl<T_>::T T;

仍未定义。