C ++在两个不同的类中实现接口

时间:2013-04-19 08:28:16

标签: c++ interface

我正在尝试为我的gui实现抽象一个通用接口,但我很难弄清楚如何干净利落地完成这项工作。这是我想要实现的简化版本。

class IBorderable
{
    virtual unsigned int getBorderWidth(BorderIndex index) const = 0;
    virtual void setBorderWidth(BorderIndex index, unsigned int width) = 0;
};

class Square : public IBorderable
{
    // Implement while limiting BorderIndex to only 4
    // Calling with invalid BorderIndex is handled at compile time
};

class Cube : public IBorderable
{
    // Implement while limiting BorderIndex to only 6
};

理想情况下,我希望通过多态实现这一点,而不进行任何条件检查,以确保BorderIndex在边界内。是否有可能在编译时抛出错误?我本来希望使用强类型的枚举,但它们无法派生。

2 个答案:

答案 0 :(得分:1)

我害怕检查在编译时是不可能没有技巧使得公共接口的整个点无用。 在运行时这样做很容易。

只有IBorderable引用/指针的编译器不知道它背后是什么类型的派生对象而且它不需要 - 这就是接口和虚函数的全部要点。

答案 1 :(得分:0)

您可以将IBorderable作为模板,并使用std :: enable_if在编译时调用无效索引失败。

但是我建议你让IBorderable成为一个包含n个Border实例的容器,并在运行时访问无效索引时处理错误。我觉得模板化(编译时最大索引检查)解决方案的复杂性并不值得。