【发布时间】:2012-04-27 07:44:41
【问题描述】:
我遇到了一些困难,将强制转换重载为指向类的函数运算符的指针。在代码中,我想要的是:
typedef int(*funcptrtype)(int);
struct castable {
operator funcptrtype() {return NULL;}
};
但我希望能够在不使用typedef 的情况下做到这一点。如果你很好奇,我需要这个,因为 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 不应代表函数类型或 数组类型
但它没有说函数指针类型(第一个代码片段仍然有效......)。
有人知道不带typedef 的正确语法吗?
【问题讨论】:
-
@LuchianGrigore:您应该投票以完全重复关闭(而不是仅仅将链接添加为评论,另一方面,这也比不这样做要好得多:))
-
@DavidRodríguez-dribeas 我没有投票,因为我不知道它是否完全重复。
-
对我来说看起来很准确。
-
@LuchianGrigore 在我看来也很准确。我不明白我是怎么错过的。
标签: c++ casting function-pointers