gpt4 book ai didi

c++ - 如何使 AddCallback() 更安全 - 对象中不同事件的函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:28:14 24 4
gpt4 key购买 nike

我有 AddCallback()带有第二个参数 int .但是如何减少
传输错误的可能性type从客户端代码?对于这种情况,什么是好的风格?注意: 如果不等于 mouseDown,则类型不正确mouseUp mouseHover mouseLeave

const int  mouseDown = 0;
const int mouseUp = 1;
const int mouseHover = 2;
const int mouseLeave = 3;

class Widget
{
public:
...
bool AddCallback(void (*func)(Widget*), const int type);
protected:
std::vector<void (*)(Widget*)> funcsDown;
std::vector<void (*)(Widget*)> funcsUp;
std::vector<void (*)(Widget*)> funcsHover;
std::vector<void (*)(Widget*)> funcsLeave;
...
};

最佳答案

对于 C++11,您应该使用强类型枚举:

enum class mouseAction { mouseDown = 0, mouseUp = 1, mouseHover = 2, mouseLeave = 3 };

bool AddCallback(void (*func)(Widget*), const mouseAction type);

使用 C++03,您仍然可以使用枚举并提供第二个重载来使使用整数的调用变成链接器错误:

enum mouseAction { mouseDown = 0, mouseUp = 1, mouseHover = 2, mouseLeave = 3 };

// implement this method (here or somewhere else)
bool AddCallback(void (*func)(Widget*), const mouseAction type);

// but only declare this one:
bool AddCallback(void (*func)(Widget*), const int type);

如果你这样调用它:

myWidget.AddCallback( &foo, mouseDown ); // works
myWidget.AddCallback( &foo, 42 ); // linker error

关于c++ - 如何使 AddCallback() 更安全 - 对象中不同事件的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15844566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com