我遇到了一些困难,将转换重载到指向类的函数运算符的指针。在代码中,我想要的是:
typedef int(*funcptrtype)(int);
struct castable {
operator funcptrtype() {return NULL;}
};
但我希望能够在不使用typedef
的情况下完成。如果你很好奇,我需要这个,因为pre-c ++ 11模板别名不可用(因此typedef
技巧不是模板化上下文中的选项......)
我通常希望这可行:
operator int(*)(int)() {return NULL;}
但事实并非如此。编译器(g ++ 4.6.1)说:
error: ‘<invalid operator>’ declared as function returning a function
这有效:
int (* operator()())(int){return 0;}
但实际上你正在重载operator()
以返回一个函数指针:)
标准说:
conversion-type-id不代表函数类型也不代表 数组类型
但它没有说功能指针类型(第一个代码snipplet无论如何......)。
有没有人知道没有typedef
的正确语法?
答案 0 :(得分:3)
语法不允许这样:转换运算符声明中的类型是类型说明符,而不是 type-id 。你必须使用typedef或别名;在模板上下文中,使用通常的替换:
template<typename T>
struct something {
typedef T (*type)(int);
};