gpt4 book ai didi

c++ - 多态性和检查一个对象是否有某个成员方法

转载 作者:太空宇宙 更新时间:2023-11-04 14:38:37 25 4
gpt4 key购买 nike

我正在和一个 friend 开发一个 GUI 库,我们遇到了如何确定某个元素是否应该可点击(或可移动等)的问题。

我们决定只检查特定对象是否存在函数,所有 gui 元素都存储在一个 vector 中,并带有指向基类的指针。

例如,如果我有

class Base {};
class Derived : public Base
{
void example() {}
}
vector<Base*> objects;

如何检查对象的成员是否具有名为 example 的函数。

如果这不可能,那么可以采用不同的方式来实现可选行为,例如点击等。

最佳答案

你可以在你的基类中有一个虚拟的 IsClickable() 方法:

class Widget {
public:
virtual bool IsClickable(void) { return false; }
};
class ClickableWidget : public Widget
{
public:
virtual bool IsClickable(void) { return true; }
}
class SometimesClickableWidget : public Widget
{
public:
virtual bool IsClickable(void);
// More complex logic punted to .cc file.
}
vector<Base*> objects;

这样,对象默认为不可点击。可点击对象要么覆盖 IsClickable(),要么继承 ClickableWidget 而不是 Widget。不需要花哨的元编程。

编辑:确定某物是否可点击:

if(object->IsClickable()) {
// Hey, it's clickable!
}

关于c++ - 多态性和检查一个对象是否有某个成员方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3496561/

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