c++ - 如何在不强制转换或复制签名的情况下使派生类实例的基类模板函数可见?
问题描述
从派生类实例调用基类模板函数时,有什么方法可以避免强制转换?假设如下:
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
实现中直接复制函数签名?我知道依赖名称查找,正在寻找一种可维护的方法来解决所有派生类的问题。
解决方案
只需添加using Foo::quux;
:
class Bar : public Foo
{
public:
using Foo::quux;
void quux() override {}
};
推荐阅读
- cefsharp - DevTools windowOpen 事件未从 Cef/CefSharp 触发
- python - AttributeError:模块“jaxlib.xla_extension”没有属性“PmapFunction”
- clickhouse - 如何为clickhouse创建索引?
- data-structures - 如果在链接列表中进行无限插入会发生什么?
- reactjs - 防止重新渲染子级以供使用PDF updateInstance()
- python - ValueError:时间数据“2021-11-11 05:01:12.11111”与格式“%Y-%m-%d %H:%M:%S %p”不匹配
- python - 有谁知道为什么我没有得到输出,代码编译但不返回输出
- python - Groupby年月并在Python中查找前N个最小值列
- python - 根据另一个列表对列表进行排序
- node.js - MongoDB 环境变量错误,不确定如何继续