【问题标题】:Overloading type cast operator, to cast to a pointer to function [duplicate]重载类型转换运算符,以转换为指向函数的指针[重复]
【发布时间】: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


【解决方案1】:

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

template<typename T>
struct something {
  typedef T (*type)(int);
};

【讨论】:

  • 谢谢,但问题在于参数类型 T 不再可推演。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 2021-09-20
相关资源
最近更新 更多