根据标准,转化函数有一个函数ID operator
conversion-type-id ,看起来像operator char(&)[4]
我相信。但我无法弄清楚函数参数列表的放置位置。 gcc不接受operator char(&())[4]
或operator char(&)[4]()
或我能想到的任何内容。
现在,gcc似乎接受(&operator char ())[4]
但是clang不接受,而且我也倾向于不接受,因为它似乎不符合我所理解的语法。
我不想使用typedef
,因为我想避免使用它来污染命名空间。
答案 0 :(得分:9)
您可以使用身份
template<typename T>
struct identity { typedef T type; };
struct sample {
operator identity<char[4]>::type &() {
...
}
};
你是正确的,函数和数组声明符在转换函数中不起作用。这也是this issue report中已知和讨论的。但是我认为C ++ 0x已经提供了他们在那里讨论的解决方案
struct sample {
template<typename T>
using id = T;
template<typename T, int N>
operator id<T[N]> &() {
...
}
};
与identity
和typedef
方法不同,我认为这可以推导T
和N
。
答案 1 :(得分:4)
C ++没有为此提供语法。当 为类型使用typedef-name时,这就是其中一种情况。
为了避免污染命名空间,在类中声明typedef-name是完全可以的
struct S {
int a[4];
typedef int A[4];
operator A&() { return a; }
};