C++ 重载类型转换运算符,转换为指向函数的指针

C++ 重载类型转换运算符,转换为指向函数的指针,c++,casting,function-pointers,C++,Casting,Function Pointers,我遇到了一些困难,重载了一个类的函数操作符的指针强制转换。在代码中,我想要的是: typedef int(*funcptrtype)(int); struct castable { operator funcptrtype() {return NULL;} }; 但我希望能够在不使用typedef的情况下完成此操作。如果你好奇的话,我需要这个,因为c++11之前的模板别名不可用(所以typedef技巧在模板上下文中不是一个选项…) 我通常认为这是可行的: operator int(*)

我遇到了一些困难,重载了一个类的函数操作符的指针强制转换。在代码中,我想要的是:

typedef int(*funcptrtype)(int);

struct castable {
   operator funcptrtype() {return NULL;}
};
但我希望能够在不使用
typedef
的情况下完成此操作。如果你好奇的话,我需要这个,因为c++11之前的模板别名不可用(所以
typedef
技巧在模板上下文中不是一个选项…)

我通常认为这是可行的:

operator int(*)(int)() {return NULL;}
但事实并非如此。编译器(g++4.6.1)说:

但实际上您正在重载
操作符()
以返回函数指针:)

标准上说:

转换类型id不得表示函数类型或 数组类型

但是它没有说函数指针类型(第一个代码snipplet无论如何都能工作…)


是否有人知道正确的语法w/o
typedef

语法不允许这样做:转换运算符声明中的类型是类型说明符,而不是类型id。您必须使用typedef或别名;在模板上下文中,使用通常的替换:

template<typename T>
struct something {
  typedef T (*type)(int);
};
模板
构造某物{
类型定义T(*类型)(内部);
};

@LuchianGrigore:你应该投票决定是否以完全相同的方式关闭(而不仅仅是添加链接作为评论,这也比不这样做要好得多:)@DavidRodríguez dribeas我没有投票,因为我不知道它是否是完全相同的。看起来对我来说很精确。@LuchianGrigore对我来说也很精确。我不明白的是我怎么会错过它。谢谢,但问题是参数类型t不再是可推断的。
int (* operator()())(int){return 0;}
template<typename T>
struct something {
  typedef T (*type)(int);
};