Класс CRTP + Traits :«тип не назван…»

Я пытаюсь реализовать CRTP с шаблонным классом, и у меня возникает ошибка со следующим примером кода:

#include <iostream>

template<class T> class Traits
{
    public:
        typedef typename T::type type; // <- Error
                                       // : "no type named 'type' in 'class MyClass<double, 3u, 3u>'
        static const unsigned int m_const = T::m_const;
        static const unsigned int n_const = T::n_const;
        static const unsigned int size_const = T::m_const*T::n_const;
};

template<class T0> class Crtp
{
    public:
        typedef typename Traits<T0>::type crtp_type;
        static const unsigned int size = Traits<T0>::size_const; // <- This is OK
};

template<typename TYPE, unsigned int M, unsigned int N>
class MyClass : public Crtp< MyClass<TYPE, M, N> >
{
    public:
        typedef TYPE type;
        static const unsigned int m_const = M;
        static const unsigned int n_const = N;
};

int main()
{
    MyClass<double, 3, 3> x;
    std::cout<<x.size<<std::endl;
    return 0;
}

Я не понимаю, что вызывает эту проблему и как ее исправить.

На самом деле моя цель состоит в том, чтобы класс CRTP знал аргументы шаблона производного класса БЕЗ передачи их в качестве аргумента шаблона класса CRTP.

У вас есть идеи, как это реализовать?

РЕДАКТИРОВАТЬ (, относящуюся к первому первому):Мой класс CRTP должен иметь возможность обрабатывать производные классы с разным количеством параметров шаблона

6
задан Vincent 3 August 2012 в 13:26
поделиться