在工厂中使用指针函数会生成编译时错误

时间:2014-05-22 20:39:49

标签: c++ function

我有以下使用声明

template<typename T> using createShapeFunction = Shape<T>(*)(void);

这适用于工厂,因此当我定义createShape()方法时,我使用以下语法:

createShapeFunction<T>* function = creationFunctions.at(nameOfType);
Shape<T>* returnShape = *function();

现在这给了我错误:

error C2064: term does not evaluate to a function taking 0 arguments

有谁能告诉我为什么?

修改:我忘了提及以下内容:

  • creationFunction的类型为std :: map&lt; std :: string,createShapeFunction&lt; T&GT; * GT; creationFunctions
  • 我用来创建对象的函数具有以下签名static Shape * __stdcall Create()

1 个答案:

答案 0 :(得分:1)

从你的using子句中,createShapeFunction<T>是一个指向函数的指针,该函数不带参数并返回Shape<T>

createShapeFunction<T>* ff声明为指向createShapeFunction<T>的指针。因此,f是指向函数的指针,该函数不带参数并返回Shape<T>

请尝试createShapeFunction<T> function,这应该有用。


从您的编辑中,我上面描述的问题不是您的问题。我发现使用指向函数的指针是非常可疑的。我很好奇你是如何将函数插入地图的。

那就是说,如果你真的想要这个,正如FrançoisMoisan所指出的那样,你需要使用function的原始定义并使用

Shape<T> returnShape = (*function)();

注意,返回形状是Shape<T>,因为这是函数返回的内容。