是否可以使用运算符进行显式构造?
就像在这个例子中一样(当然不起作用):
class myFoo {
public:
double x, y;
myFoo(double, double);
void operator [] (myFoo);
};
int main() {
myFoo f1(0.0, 1.1);
f1[ {9.9, 10.0} ]; /// or whatever syntax to use, does not work
f1.operator[] ( {9.9, 10.0} ); /// works !
}
答案 0 :(得分:1)
嗯...
f1[myFoo(9.9, 10.0)];
?
需要合理的operator[]
(即期望const myFoo&
绑定到临时)。
答案 1 :(得分:1)
C ++ 11允许将初始化列表传递给重载的operator []
(见13.5.5)。
你需要像
这样的东西void operator[](std::initializer_list<double>);
这符合f1[ {9.9, 10.0} ];
的原始语法。
答案 2 :(得分:0)
在当前的C ++ 03或即将推出的C ++ 11标准中,使用operator []
是不可能的。但是,您可以使用一些奇怪的语法来利用operator []
来实现相同的目标:
f1[myFoo(9.9,10.0)];
其中operator []
为,
myFoo& operator [] (const myFoo&);
答案 3 :(得分:0)
是的,它确实适用于当前代码。使用'[]'可能是你的实现(我所做的就是在类中的数组中返回索引处的值。所以类现在可以用作数组类型)运算符所有需要完成的操作确保传入const引用并且不进行任何更改。
int main() {
myFoo f1(0.0, 1.1);
f1[f1]; /// or whatever syntax to use
}
会工作。
答案 4 :(得分:0)
您的代码在C ++ 11(g ++ Version 4.5.2)中运行良好。你只需要说
f1[myFoo {9.9, 10.0} ];
而不是
f1[ {9.9, 10.0} ];