Я пытаюсь реализовать 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 должен иметь возможность обрабатывать производные классы с разным количеством параметров шаблона
-. 121 ---1631615-Я получаю следующее сообщение об ошибке после HTTP POST в форме ASP.NET, размещенной внутри UserControl:
Failed to load viewstate. The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request. For example, when adding controls dynamically, the controls added during a post-back must match the type and position of the controls added during the initial request.
Вот дополнительная информация:
. Я применил все последние пакеты обновлений. У меня уже закончились идеи! Я даже перезапустил его, а также исполнил ричуал над сервером с песней и специальным танцем, но безрезультатно.