【问题标题】:Call a function while setting value of a declarement [closed]在设置声明的值时调用函数[关闭]
【发布时间】:2013-05-19 16:43:52
【问题描述】:

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

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.

【问题讨论】:

  • i 是全局变量吗?它对func有何影响?
  • 我不明白。 i = 123; func(); 有什么问题?
  • 另外,你知道逗号运算符吗? int i; i = 123, func();
  • 你的意思是像属性getter/setter函数吗?
  • 您能否尝试以不同的方式再次解释您想要实现的目标?因为目前还很不清楚。

标签: c++ c function operators


【解决方案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

【讨论】:

  • 嗯,这不是我想要的但是很好,在main()中它不会直接调用函数。
【解决方案2】:

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

int i = func(123);

为此,您的func 应如下所示:

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

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

【讨论】:

  • 没有。我可以像你一样做,但我不能直接使用函数。诠释 i = 123; //这必须将 i 设置为 123 并调用包含在项目中的函数。我认为这只有在我声明新运算符时才有效。但我不知道该怎么做。
  • @user2399300 那是做不到的,我不明白你为什么要这样做。你能得到的最接近的是int i = func();func 返回值123。但如果它总是返回相同的值,我看不出你为什么要在函数中使用它。
【解决方案3】:

你不能重载$,事实上$不是一个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;
}

【讨论】:

  • 我想创建一个像 $ 这样的 NEW 运算符,或者重载现有的运算符。所以这不能做?
  • @user2399300 此外,您不能创建新的运算符。
  • 我为你写了一个代码,它重载了^(而不是$),它和你想要的一样。
  • 新编辑非常好,但@Joachim Isaksson 之前写过类似的答案。但是您的新答案和他的答案确实非常好,并且与我的问题最相关。谢谢你俩! (对不起,不允许检查有用与否)
猜你喜欢
  • 2021-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多