我正在尝试创建一个类,它是用于处理具有特定状态的消息的处理程序。当准备好消息时,我希望创建一个state_t
引用新y
数据的新结构。然后我希望能够通过相同的state
变量访问新对象。带有指针的最小示例如下:
class Handler {
int x; // something config for the handler
struct state_t {
int *y;
state_t(int *y) : y(y) {}
};
std::optional<state_t> state;
Handler(int x) : x(x), state(std::nullopt) {}
void prepare_message(int *y) {
state = state_t(y);
}
void handle_state() {
// do something with the y e.g. send it over a socket
}
};
我想知道是否有一个好的方法可以使用引用而不是指向 的指针来实现这一点y
。直接替换它不会编译,因为复制赋值被隐式删除了。能以一种优雅的方式解决这个问题吗?
正如@RemyLebeau评论的那样,您可以使用
std::reference_wrapper
。正如您所见,它完全满足您的要求:
下面将对此进行证明。
请注意,我添加了一个公共
test()
方法来表明state_t
现在可复制/分配(尽管编译的事实prepare_message
也暗示了这一点)。我还将构造函数设为
Handler
公共,以便从中创建它main
。输出:
Live demo