c++ - "multiple overloads"使用具有重复类型的模板类

标签 c++ c++11 templates overloading

我正在尝试编写一个采用两种模板类型的类。这个类继承自一个接口(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);
}

T1T2 的类型相同时,我遇到了麻烦。显然,这意味着将生成具有相同类型的两个 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/

相关文章:

c++ - 将 minkowski 差异减少到仅其外壳顶点?

c++ - 参数包模板元编程深度优先搜索

multithreading - 具有静态互斥量和线程安全性的静态成员

c++ - 函数模板不识别左值

python - 在django模板中使用for循环自动获取列的名称

javascript - Grunt 编译 handlebars 的方式不同——我无法加载编译后的模板

c++ - 如果在成员中抛出异常,则删除母对象

c++ - 创建独立控件的好策略 Direct2D

c++ - 当对象绑定(bind)到成员函数时,为什么 std::function 会调用析构函数?

c++ - 在 C++ 中,另外两个不同的共享对象可以从第三个共享对象访问 Singleton 吗?