在设置声明值时调用函数

时间:2013-05-19 16:43:53

标签: c++ c function operators

我想在设置值时调用函数。 例如:

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.

3 个答案:

答案 0 :(得分:1)

听起来好像要将123传递给函数,然后将该函数的返回值存储在i中,如下所示:

int i = func(123);

要实现这一点,您的func应该是这样的:

int func(int val)
{
  // ...
  return /* ... */;
}

但是很难解读你的问题,所以这可能完全不是你想要的。

答案 1 :(得分:1)

如果需要在赋值时触发函数调用,则可以将类型包装在覆盖赋值运算符的类中;请注意,您可以want to override more than just assignment,这只是一个示例,而不是样式指南:)

#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

答案 2 :(得分:0)

您不能重载$,实际上$不是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;
}