Пытаюсь сделать абстрактный класс на шаблонах, чтобы от него потом наследоваться. Не получается.
Вот код:
template<typename M, typename T>
class Data
{
public:
virtual T process() = 0;
virtual M<T> copy() = 0;
};
template<typename T>
class DataClass : public Data<DataClass, T>
{
public:
T process()
{
return T;
}
DataClass<T> copy()
{
return DataClass<T>();
}
};
int main(int argc, char *argv[])
{
DataClass<int> data;
return 0;
}
Error log
Test.cpp:6:13: error: ‘M’ is not a template virtual M<T> copy() = 0; ^ Test.cpp:10:43: error: type/value mismatch at argument 1 in template parameter list for ‘template<class M, class T> class Data’ class DataClass : public Data<DataClass, T> ^ Test.cpp:10:43: error: expected a type, got ‘DataClass’ Test.cpp: In member function ‘T DataClass<T>::process()’: Test.cpp:15:17: error: expected primary-expression before ‘;’ token return T;
Если такое не возможно, то как можно сделать подобное наследование?