LINUX.ORG.RU

Вопрос по наследованию шаблона в C++

 ,


0

2

Пытаюсь сделать абстрактный класс на шаблонах, чтобы от него потом наследоваться. Не получается.

Вот код:

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;

Если такое не возможно, то как можно сделать подобное наследование?

Милок, глазенки-то протри, в них труп страуса помочился - у тебя ошибка в 6й строке, причем здесь наследование?

anonymous ()
template<template<typename> class 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;
}
ilammy ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.