类方法模板参数列表

时间:2012-03-26 21:30:49

标签: c++ templates

我在我的界面中声明了以下模板方法:

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; 正确的函数调用是什么样的?

(另外 - 作为旁注,可以在界面中声明模板方法并要求用户实现它吗?因为你不能声明它是虚拟的)

由于

4 个答案:

答案 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()); }