我有以下使用声明
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
有谁能告诉我为什么?
修改:我忘了提及以下内容:
答案 0 :(得分:1)
从你的using子句中,createShapeFunction<T>
是一个指向函数的指针,该函数不带参数并返回Shape<T>
。
createShapeFunction<T>* f
将f
声明为指向createShapeFunction<T>
的指针。因此,f
是指向函数的指针,该函数不带参数并返回Shape<T>
请尝试createShapeFunction<T> function
,这应该有用。
从您的编辑中,我上面描述的问题不是您的问题。我发现使用指向函数的指针是非常可疑的。我很好奇你是如何将函数插入地图的。
那就是说,如果你真的想要这个,正如FrançoisMoisan所指出的那样,你需要使用function
的原始定义并使用
Shape<T> returnShape = (*function)();
注意,返回形状是Shape<T>
,因为这是函数返回的内容。