我正在尝试为我的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在边界内。是否有可能在编译时抛出错误?我本来希望使用强类型的枚举,但它们无法派生。
答案 0 :(得分:1)
我害怕检查在编译时是不可能没有技巧使得公共接口的整个点无用。 在运行时这样做很容易。
只有IBorderable引用/指针的编译器不知道它背后是什么类型的派生对象而且它不需要 - 这就是接口和虚函数的全部要点。
答案 1 :(得分:0)
您可以将IBorderable作为模板,并使用std :: enable_if在编译时调用无效索引失败。
但是我建议你让IBorderable成为一个包含n个Border实例的容器,并在运行时访问无效索引时处理错误。我觉得模板化(编译时最大索引检查)解决方案的复杂性并不值得。