Mih*_*yan 2 c++ templates crtp
我正在使用CRT模式,并希望基类typedef从派生类中看到s.在这篇文章中   @James McNellis建议使用base_traits类来做到这一点并且它工作正常.但是在该帖子中描述的情况下,派生类本身就是一个模板.当派生类不是模板时,此方法在VS2010中不起作用.
template <class D>
struct base_traits;
template <class D>
struct base
{
    typedef typename base_traits<D>::value_t value_t;
};
struct derived : base<derived>
{
    typedef typename base_traits<derived>::value_t value_t;
};
template<>
struct base_traits<derived>
{
    typedef int value_t;
};
上面的代码提供了很多错误.第一个是:
错误C2027:使用未定义类型'base_traits
在base类的typedef 的行上.
base_traits<derived>必须在它的使用之前声明和定义,因为隐含的实例化base<derived>(下面,我转发声明derived)需要它:
template <class D>
struct base_traits;
template <class D>
struct base
{
    typedef typename base_traits<D>::value_t value_t;
};
struct derived;
template<>
struct base_traits<derived>
{
    typedef int value_t;
};
struct derived : base<derived>
{
    typedef base_traits<derived>::value_t value_t;
};
int main(void)
{
    derived d;
}