重载类型转换操作符,转换为指向函数的指针

时间:2012-04-15 21:36:52

标签: c++ casting function-pointers

我遇到了一些困难,将转换重载到指向类的函数运算符的指针。在代码中,我想要的是:

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的正确语法?

1 个答案:

答案 0 :(得分:3)

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

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