我正在尝试编写一个采用两种模板类型的类。这个类继承自一个接口(interface)。请参见下面的代码。
#include <iostream>
#include <string>
template <typename T>
class IObserver {
public:
virtual void Next(const T& value) noexcept = 0;
};
template <typename T1, typename T2>
class BinaryObserver : public IObserver<T1>, public IObserver<T2> {
public:
void Next(const T1& value) noexcept override{};
void Next(const T2& value) noexcept override{};
};
int main() {
// This is OK
BinaryObserver<int, float> mc1;
mc1.Next(0);
mc1.Next(0.0f);
// This fails to compile with "multiple overloads"
BinaryObserver<int, int> mc2;
mc2.Next(0);
mc2.Next(0);
}
当 T1
与 T2
的类型相同时,我遇到了麻烦。显然,这意味着将生成具有相同类型的两个 Next
函数,这会产生一个错误:multiple overloads of 'Next' instantiate to the same signature
。
解决此问题的惯用方法是什么?我不确定如何处理 T1=T2 时的情况,因为我只需要生成一个 Next
函数
谢谢!
最佳答案
特化如何:
template <typename T>
class BinaryObserver<T, T> : public IObserver<T> {
public:
void Next(const T & value) noexcept override{};
};
关于c++ - "multiple overloads"使用具有重复类型的模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52458675/