3

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

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()返回一个函数指针:)

标准说:

转换类型 ID 不应代表函数类型或数组类型

但它没有说函数指针类型(第一个代码片段无论如何都可以工作......)。

有谁知道 w/o 的正确语法typedef

4

1 回答 1

3

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

template<typename T>
struct something {
  typedef T (*type)(int);
};
于 2012-04-15T21:59:48.680 回答