我想在设置值时调用一个函数。例如:
int i;
i = 123; //Here i want to call a function.
//Want to do this:
//i = 123;func();
//But i do not want to do like this.
我可以添加一个可以做到这一点的新运营商吗?
int i;
i $ 123; //set i = 123 and call a function.
听起来您想传递123
给一个函数,然后将该函数的返回值存储在 中i
,如下所示:
int i = func(123);
为此,您func
应该看起来像这样:
int func(int val)
{
// ...
return /* ... */;
}
但是很难破译你的问题,所以这可能完全不是你想要的。
如果需要在赋值时触发函数调用,可以将类型包装在一个覆盖赋值运算符的类中;请注意,您可能想要覆盖的不仅仅是赋值,这只是一个示例,而不是样式指南:)
#include <iostream>
template<class T> class wrap
{
private:
T value;
void (*fn)();
public:
wrap(void (*_fn)()) { fn=_fn; }
T& operator=(const T& in) { value = in; fn(); return value;}
operator T() { return value; }
};
void func() {
std::cout << "func() called!" << std::endl;
}
int main(void)
{
wrap<int> i(func);
i=5; // Assigns i and calls func()
std::cout << i << std::endl; // i is still usable as an int
}
> Output:
> func() called!
> 5
你不能重载$
,其实$
不是C++操作符。(即使它是一个运算符,它也不在可重载运算符的列表中)。
此外,您不能为 重载任何运算符int
,您必须为类重载运算符。
如果你想有一个统一的方法,试试这个简单的方法:
class Integer {
int x;
public:
Integer(int x = 0) : x(x) {}
operator int() {
return x;
}
void operator^(int i) {
x = i;
func();
}
};
int main()
{
Integer i;
i ^ 123;
std::cout << i << std::endl;
}