myClass(x,y,z)=值的C ++运算符重载

时间:2014-08-01 12:57:12

标签: c++ operator-overloading

在C ++中,我应该如何重载函数调用操作符,以便我的类的实例可以接受这样的表达式:myClass(x,y,z) = value

我有一个模板类Array3D,它用作1D数组的包装器。我想在此数组中的某个索引处设置一个指定值。直到现在我习惯用常规函数来做这样的事情:
array.setValueAt(int x, int y, int z, int value)
但是现在我想重载函数调用操作符并改为使用它。所以类似的东西: array(x, y, z) = value

2 个答案:

答案 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访问值。