在C ++中,我应该如何重载函数调用操作符,以便我的类的实例可以接受这样的表达式:myClass(x,y,z) = value
?
我有一个模板类Array3D,它用作1D数组的包装器。我想在此数组中的某个索引处设置一个指定值。直到现在我习惯用常规函数来做这样的事情:
array.setValueAt(int x, int y, int z, int value)
但是现在我想重载函数调用操作符并改为使用它。所以类似的东西:
array(x, y, z) = value
答案 0 :(得分:1)
您需要函数调用运算符operator()
:
struct Foo
{
int & operator()(int, int, int) { return x; }
int x;
};
你应该让它返回一个左值(或其他超载赋值的东西),以便你的赋值示例能够工作。
用法:
Foo a;
a(1, 2, 3) = 10;
assert(a.x == 10);
答案 1 :(得分:1)
如果您的类包含某些类型ValueType
的值,则可以返回对它的引用:
ValueType & operator () (int x, int y, int z);
假设您使用int
编制索引。为了完整起见,您可能会发现添加方便:
const ValueType & operator () (int x, int y, int z) const;
用于const访问值。