在C ++中覆盖模板类

时间:2017-03-18 17:50:00

标签: c++ templates inheritance

我遵循了this示例,介绍了如何使用特定模板覆盖C ++中的模板类,但Visual Studio编译器一直在抱怨某种语法错误。这是我的代码:

enum LFOType {
    LIFO,
    FIFO
};

template<typename DataType, LFOType Behavior, int MaxElems = 10>
class LFO {
public:
    virtual DataType& top();
}

#include <string>

#include "LFO.h"

template<int MaxElems = 10>
class StringFIFO : public LFO<std::string, FIFO, MaxElems> {
public:
    virtual ~StringFIFO() {};
};

现在我试图覆盖StringFIFO类中的函数top(),但我无法让它工作。所以这就是我的尝试:

template<int MaxElems = 10>
    class StringFIFO : public LFO<std::string, FIFO, MaxElems> {
    public:
        virtual ~StringFIFO() {};

        std::string top() override;
    };

或者不是先覆盖声明,而是直接在cpp文件中覆盖它:

template<int MaxElems>
std::string StringFIFO<MaxElems>::top<std::string, FIFO, MaxElems>() {

}

但这些方法都不起作用。编译器抱怨'std::basic_string<char>' is not identical or covariant to return type 'DataType&' of overridden function LFO<DataType, Behavior, MaxElems>::top

我做错了什么?

0 个答案:

没有答案