我在我的界面中声明了以下模板方法:
class IObjectFactory
{
public:
virtual ~IObjectFactory() { }
virtual int32_t Init() = 0;
virtual bool Destroy() = 0;
virtual bool Start() = 0;
virtual bool Stop() = 0;
virtual bool isRunning() = 0;
virtual void Tick() = 0;
template <class T>
Object<T> CreateObject(T);
};
我不确定这个电话是怎么样的。我认为以下就足够了,其中mObjFactory
是前面提到的虚拟类的实现;
inline void AllocateWithMemPoolAux() { mObjFactory->CreateObject<TestClass1>(); }
我得到的错误是&#34;没有函数模板的实例与参数列表匹配&#34; 正确的函数调用是什么样的?
(另外 - 作为旁注,可以在界面中声明模板方法并要求用户实现它吗?因为你不能声明它是虚拟的)
由于
答案 0 :(得分:1)
通知:
template <class T>
Object<T> CreateObject(T);
你是说吗?
template <class T>
Object<T> CreateObject();
答案 1 :(得分:0)
您收到此错误,因为您没有将TestClass1
的对象传递给此方法。
正确编译代码如下:
inline void AllocateWithMemPoolAux()
{
TestClass1 tObj;
mObjFactory->CreateObject<TestClass1>(tObj);
}
我认为你的AllocateWithMemPoolAux()
比这里显示的副作用更多;至少你需要用CreateObject
函数的返回值做一些事情(通过引用将对象传递给这个函数可能更好的设计)。
答案 2 :(得分:0)
模板功能
template <class T>
Object<T> CreateObject(T);
采用T
类型的一个参数。你没有它就叫它。
答案 3 :(得分:0)
你没有参数就调用了这个方法:
mObjFactory->CreateObject<TestClass1>();
您需要传递TestClass1类型的对象:
inline void AllocateWithMemPoolAux() { mObjFactory->CreateObject<TestClass1>(TestClass1()); }