Not*_*ble 0 c++ polymorphism pointers
我正在和朋友一起开发一个GUI库,我们遇到了如何确定某个元素是否可以点击(或者可移动等)的问题.
我们决定只检查特定对象是否存在函数,所有gui元素都存储在带有指向基类的指针的向量中.
所以,例如,如果我有
class Base {};
class Derived : public Base
{
void example() {}
}
vector<Base*> objects;
Run Code Online (Sandbox Code Playgroud)
如何检查对象成员是否具有名为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;
Run Code Online (Sandbox Code Playgroud)
这样,对象默认不可点击.可点击的对象覆盖IsClickable()或ClickableWidget替代而不是Widget.不需要花哨的元编程.
编辑:确定某些内容是否可点击:
if(object->IsClickable()) {
// Hey, it's clickable!
}
Run Code Online (Sandbox Code Playgroud)