模板化虚方法的 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 作为值参数。这会导致各种不好的事情。它实际上可能是您所问问题的根源,但我不确定。
我有一个模板化界面和一个模板化实现。我还有一个将接口的特化作为参数的方法。我收到链接器错误:
"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 作为值参数。这会导致各种不好的事情。它实际上可能是您所问问题的根源,但我不确定。