假设我有一个基类 A,我希望它有一个方法 getName 可以接受一个整数或一个字符串作为参数。所以我创建:
virtual string getName(int index) = 0;
virtual string getName(string key) = 0;
现在,我想创建两个不同的子类 B 和 C。B 只需要 getName(int index)
而 C 只需要 getName(string key)
。
但是,如果我不覆盖两个子类中的两个方法,则会出现错误。但是如果我这样做,那么 B 和 C 将有一个空方法,因为它们不需要 getName
我该如何克服这个问题?
最佳答案
听起来您实际上想要两种不同的接口(interface):一种支持getName(int)
,另一种支持getName(string)
。
struct GetNameInt {
virtual string getName(int index) = 0;
};
struct GetNameStr {
virtual string getName(string key) = 0;
};
struct B : GetNameInt { /* ... */ };
struct C : GetNameStr { /* ... */ };
如果您真的需要一个具有相同接口(interface)的基类,并且您只在运行时知道您是否需要一个字符串
或 int
,您可能想使用 std::variant
:
struct GetName {
virtual string getName(std::variant<int, string>) = 0;
};
关于c++ - C++ 中具有多个参数类型的虚方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42631574/