模板化虚方法的 C++ 链接器错误

C++ Linker error with templated virtual method

我有一个模板化界面和一个模板化实现。我还有一个将接口的特化作为参数的方法。我收到链接器错误:

"symbol(s) not found for architecture...

这是为什么?实现此目标的正确方法是什么:适用于各种类型的接口,适用于各种类型的实现,以及将专门用于给定类型的接口作为参数的方法?

下面的例子只是一个最小的例子,我的实际 类 有不同的功能。

谢谢

#include <iostream>

template<class T>
class IStore{
public:
  virtual T get() = 0;
  virtual void set(T t) = 0;
};

template<class T>
class SimpleStore : public IStore<T>{
public:
  T get() override{    return value;   }
  void set(T t) override{    value = t;  }
private:
  T value;
};

void Print(IStore<double> mydouble){  std::cout<<mydouble.get(); }

int main(int argc, const char * argv[]) {
  SimpleStore<double> one;
  one.set(1.0);
  Print(one);
  return 0;
}

我发现您的代码存在一个主要问题:您将抽象 class 作为值参数。这会导致各种不好的事情。它实际上可能是您所问问题的根源,但我不确定。