Я пытаюсь реализовать 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 должен иметь возможность обрабатывать производные классы с разным количеством параметров шаблона