Aqu*_*pax 2 c++ function operator-keyword
我有一个类,我想重载fuction-call操作符.但是由于C++标准禁止声明两个类似的方法只返回类型不同,我得到编译错误C2556.我想将这些函数用作getter和setter方法.我知道我可以通过创建一个get和一个set函数来实现这一点.所以问题是:有没有办法以某种方式实现这一目标?
class Foo
{
private:
std::vector<int> m_vec;
public:
Foo()
{
m_vec.push_back(1);
m_vec.push_back(2);
m_vec.push_back(3);
}
//Getter
int operator()(int i)
{
return m_vec.at(i);
}
//Setter (C2556)
int& operator()(int i)
{
return m_vec.at(i);
}
};
int main()
{
Foo foo;
foo(1) = 10; //use the setter
int i = foo(1); //use the getter
return 0;
}
Run Code Online (Sandbox Code Playgroud)
解决这个问题的传统方法是使用const,例如:
#include <vector>
class Foo
{
private:
std::vector<int> m_vec;
public:
Foo()
{
m_vec.push_back(1);
m_vec.push_back(2);
m_vec.push_back(3);
}
//Setter
int& operator()(int i)
{
return m_vec.at(i);
}
//getter
int operator()(int i) const
{
return m_vec.at(i);
}
};
int main()
{
Foo foo;
foo(1) = 10; //use the setter
int i = foo(1); //use the getter
const Foo& b = foo;
int j = b(1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在,当您想要修改而不是修改对象时,编译器将使用"适当的"方法.(如果你Foo在const设置中使用,你只需要const运算符)