首页 > 解决方案 > 如何在不强制转换或复制签名的情况下使派生类实例的基类模板函数可见?

问题描述

从派生类实例调用基类模板函数时,有什么方法可以避免强制转换?假设如下:

class Foo
{
public:
    virtual void quux() = 0;
    template <class T> void quux() { ... }
};

class Bar : public Foo
{
public:
    void quux() override {}
};

然后稍后使用 class Bar

Bar bar;
bar.quux<int>();                    // error: type 'int' unexpected
static_cast<Foo&>(bar).quux<int>(); // OK

有什么方法可以让这不那么令人讨厌并使函数quux在实例上可调用,Bar而不必在Bar实现中直接复制函数签名?我知道依赖名称查找,正在寻找一种可维护的方法来解决所有派生类的问题。

标签: c++templates

解决方案


只需添加using Foo::quux;

class Bar : public Foo
{
public:
    using Foo::quux;
    void quux() override {}
};

推荐阅读