【发布时间】:2012-01-25 12:13:52
【问题描述】:
我有一个operator() 像这样的课程:
struct S
{
int operator()(int a, int b, int c, int d);
};
示例用法:
S s;
int i = s(1, 2, 3, 4);
我需要我的用户能够使用替代语法:
int i = s[1][2][3][4]; // equivalent to calling s(1, 2, 3, 4)
我知道我需要添加 S::operator[](int a) 并且它需要返回一个辅助对象。但除此之外,这一切都变得有点复杂,我觉得我正在重新发明轮子,因为其他库(例如多维数组)可能已经提供了类似的接口。
理想情况下,我会使用现有的库来实现这一目标。如果做不到这一点,我怎样才能用最通用的代码实现我的目标?
编辑:理想情况下,我希望在现代优化编译器上没有任何运行时损失。
【问题讨论】:
-
你的助手对象的operator[]需要返回另一个助手对象等
-
“最通用的代码”哈,元编程挑战 :) 让我试试
-
真的,只要保留
operator()...这些辅助结构会变得非常讨厌... -
那些其他多维数组库不会从它们的 multi-[] 表达式中返回
void。即使他们的帮助对象最终确实调用了一个 n 参数函数,他们也会期望它返回一个引用。所以我不会打赌能够重复使用很多。我同情所有参与其中的人,尤其是那些认为s[1][2][3][4]看起来像是一个合理的空洞表达的人! -
很好 @Steve 将编辑问题
标签: c++ operator-overloading metaprogramming syntactic-sugar