C++ 如何在c+中使用typedef+;在必须返回类模板的函数指针上?

C++ 如何在c+中使用typedef+;在必须返回类模板的函数指针上?,c++,C++,因此,我有以下代码: typedef Shape *(createShapeFunction)(void); 问题是形状是一个模板,所以我希望它是这样的: typedef Shape<T> *(createShapeFunction)(void); typedef Shape*(createShapeFunction)(void); 我已经尝试了以下方法 typedef template<typename T> Shape<T> *(createSh

因此,我有以下代码:

  typedef Shape *(createShapeFunction)(void);
问题是形状是一个模板,所以我希望它是这样的:

typedef Shape<T> *(createShapeFunction)(void);
typedef Shape*(createShapeFunction)(void);
我已经尝试了以下方法

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

template<typename T> typedef Shape<T> *(createShapeFunction)(void);
typedef模板形状*(createShapeFunction)(无效);
模板类型定义形状*(createShapeFunction)(无效);
这给了我错误,说这是不允许的。 你能帮忙吗?

试试这个:

template<typename T>
struct ShapeFunctionPointers {
   typedef Shape<T> (*createShape)(void);
};

ShapeFunctionPointers<int>::createShape f;
是的,在C++11中

template<typename T> using createShapeFunction = Shape<T> (*)(void);
使用createShapeFunction=Shape(*)(无效)的模板;
确实有效。这是最干净的方法。

在c++11中,应该使用
而不是
typedef
@BryanChen我会使用它,但我不愿意使用新标准,所以我尝试不太现代的方法methods@ciprianr当前位置不要让他们让你泄气。C++11很棒<代码>类型定义形状*(createShapeFunction)(无效)
表示您正在声明一个函数类型,该函数类型返回指向
形状的指针。第一组括号是多余的。我想你的意思是把
*
放在括号内。@ciprianr:同意Danvil的说法。在C++11中使用
语法创建的新的
是为了帮助解决与您完全相同的问题。它被添加到C++11正是因为在C++03中没有好的解决方案。这正是我想要的。
template<typename T> using createShapeFunction = Shape<T> (*)(void);