2017-06-19 50 views
1

我有一个简单的结构,但我不知道在此结构中的任何变量发生变化时发生事件/函数调用。在C#中,我可以通过get和set来轻松完成,但是我如何在C++中做同样的事情?任何方式来做事件,当我的结构中的任何变量发生变化时触发?

struct Player { 
    int x = 0; 
    int y = 0; 
    bool IsAlive; 
    float health; 
}; 

当然,我可以写一些自定义的类,但我想还是很容易改变的变量这样

Player MyPlayer; 
MyPlayer.x = 100; 
+3

写一些老派的getter/setters? – George

+0

编写getter和setter并添加代码以在setters中触发事件 – NathanOliver

+1

要保留该语法,“MyPlayer.x = 100;”,您必须编写自定义类“IntEvent”。 – Jarod42

回答

1

你能做的最好的是一个代理和过载operator=。虽然简单和简单的getter和setter可能会更好地工作。

#include <iostream> 

using std::cout; 
using std::endl; 

class Something { 
private: 
    template <typename Type> 
    class Proxy { 
    public: 
     Proxy(Type& in) : data{in} {} 
     Proxy& operator=(const Type& object) { 
      cout << "Changed data member" << endl; 
      this->data = object; 
      return *this; 
     } 
     const Type& operator*() { 
      return this->data; 
     } 

    private: 
     Type& data; 
    }; 

public: 
    Something(int in) : integer{in} {} 
    Proxy<int> integer; 
}; 

int main() { 
    auto something = Something{1}; 

    // trigger code to execute 
    something.integer = 2; 

    // getting the value will have a different syntax though 
    cout << *something.integer << endl; 

    return 0; 
} 
+0

您可能仍然有'operator const Type&()'。顺便说一句,您的运营商允许修改而无需事件 – Jarod42

+0

@ Jarod42是的,这将是一个更好的解决方案。我只是想向OP展示这是可能的,并且尽量减少对语法的影响 – Curious

相关问题