【发布时间】:2020-07-17 07:14:15
【问题描述】:
我想定义一个类,它继承自一堆类,但不隐藏这些类的某些特定方法。
想象一下下面的代码:
template<typename... Bases>
class SomeClass : public Bases...
{
public:
using Bases::DoSomething...;
void DoSomething(){
//this is just another overload
}
};
现在的问题是,如果只有一个类没有名为 DoSomething 的成员,我会收到错误消息。
我已经尝试过使用宏和 SFINAE 模拟“忽略如果未定义使用”,但要处理所有情况,这变得非常大而且丑陋!
你有什么办法解决这个问题吗?
如果我能定义:“嘿,使用 - 忽略缺失的成员”,那就太好了。
这里有一些示例代码:Godbolt
【问题讨论】:
-
没有完全充实,但是您可以为您继承的类定义一个包装模板,如果不存在则添加 DoSomething(如果您可以使用应该很容易的 c++20 概念)然后@ 987654325@
-
不幸的是,这并不容易——你必须处理带有和不带有泛型参数的字段、静态方法和实例方法......此外,这个不存在/人工的“DoSomething”应该是不可调用的跨度>
-
将
void DoSomething()放入一个辅助类,并从它与Bases...一起派生。 -
然后我收到错误“通过不明确的名称查找找到的成员”请参阅:godbolt.org/z/_oQFJ5
标签: c++ c++17 c++20 using-declaration name-hiding