如何获取派生自 base class 的类型名?
How to get typename defined in derived from base class?
template <class Derived>
struct Base {
typedef typename Derived::T T;
};
template <typename T_>
struct Impl : public Base<Impl<T_>> {
typedef T_ T;
};
初始化这个时,我得到了
的错误
no type named 'T' in 'Impl'
那么,如何获取派生自基 class 的类型名?
想办法去做,虽然不完美但确实有效。
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;
};
它并不完美,因为在特征 class 中,我不能写
typedef typename Impl<T_>::T T;
仍未定义。
template <class Derived>
struct Base {
typedef typename Derived::T T;
};
template <typename T_>
struct Impl : public Base<Impl<T_>> {
typedef T_ T;
};
初始化这个时,我得到了
的错误no type named 'T' in 'Impl'
那么,如何获取派生自基 class 的类型名?
想办法去做,虽然不完美但确实有效。
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;
};
它并不完美,因为在特征 class 中,我不能写
typedef typename Impl<T_>::T T;
仍未定义。