C++ 在设置宣告值时调用函数

C++ 在设置宣告值时调用函数,c++,c,function,operators,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. 听起来像是要将123传递给函数,然后将该函数的返回值存储在i中,如下所

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

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 /* ... */;
}

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

你不能超载<代码> $< /Cord>,实际上<代码> $< /Cord>不是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;
}
类整数{
int x;
公众:
整数(intx=0):x(x){}
运算符int(){
返回x;
}
无效运算符^(int i){
x=i;
func();
}
};
int main()
{
整数i;
i^123;

std::cout如果需要在赋值时触发函数调用,可以将类型封装在重写赋值运算符的类中;请注意,您可以这样做,这只是一个示例,而不是样式指南:)

#包括
模板类包装
{
私人:
T值;
无效(*fn)();
公众:
换行符(void(*u-fn)(){fn=_-fn;}
T&运算符=(常量T&in){value=in;fn();返回值;}
运算符T(){返回值;}
};
void func(){

std::cout是
i
一个全局变量吗?它如何影响
func
?我不明白。做
i=123;func();
有什么不对?另外,你知道逗号运算符吗?
int i;i=123,func();
你的意思是喜欢属性getter/setter函数吗?你能试着用另一种方式再次解释一下你想要实现什么吗?因为目前还不清楚。不。我可以像你一样做,但我不能直接使用函数。int I=123;//这必须将I设置为123,并调用项目中包含的函数。我认为这只能起作用如果我声明一个新的操作符,我就不知道该怎么做了。@user2399300这是不可能做到的,我不明白你为什么要这么做。你能得到的最接近的东西是类似于
int i=func()的东西;
并让
func
返回值
123
。但是如果它总是返回相同的值,我不明白为什么要在函数中使用它。我想创建一个像$这样的新运算符,或者重载现有运算符。所以这无法完成?@user2399300此外,您不能创建新运算符。我为您编写了一个代码,它重载
 ^
(而不是
$
),它们的功能与您的相同。新编辑非常好,但是@Joachim Isaksson以前写过类似的答案。但是您的新答案和他的答案非常好,与我的问题最相关。谢谢两位!(很抱歉,不允许检查是否有用)嗯,这不是我想要的,但它非常好,在main()中它不直接调用函数。
#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