我遵循了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
。
我做错了什么?