c++ - C++ 中具有多个参数类型的虚方法

标签 c++ virtual

假设我有一个基类 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/

相关文章:

c# - C++ 纯虚函数使类规模更大

c++ - 为什么我们不能从类中访问全局非静态变量?

C++ VaSTLy 不同的派生类 - 虚拟方法? Actor ?

windows - 如何将来自两个游戏 Controller 的输入混合匹配到一个 "virtual" Controller 中?

c++ - 指向成员问题的指针

c++ - Visual Studio C/C++ 是否支持自动软件预取?

c++ - 将以二进制给出的两个整数相乘

c++ - Qt 手势。没有收到 qgesture 事件

cakephp - Cakephp 中的连接和计数字段

c# - 如何使用 C# 从虚拟目录创建 HTTP 重定向