可以说我有一个基类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)的单个​​基类,并且仅在运行时知道是否需要stringint,则可能要使用std::variant:
struct GetName {
    virtual string getName(std::variant<int, string>) = 0;
};

关于c++ - C++中具有多个参数类型的虚拟方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42631574/

10-13 08:29