【发布时间】:2020-06-02 19:06:58
【问题描述】:
考虑以下代码:
template <class...> struct base {};
template <class... T> struct intermediate: base<void, T...> {};
template <class... T> struct derived: base<T...>, intermediate<T...> {};
using type1 = derived<int>::intermediate::base; // works
using type2 = derived<int>::base; // ambiguous
有没有办法让它工作起来没有歧义,这样derived<int>::base 就意味着层次结构中最“直接”的基类(在这个例子中是base<int>)。欢迎使用模板元编程。
【问题讨论】:
-
你能换成
struct derived: wrapped<base<T...>>, intermediate<T...> {};吗? -
是的。只要我能输入
derived<int>::base和derived<int>::intermediate::base,我就可以改变层次结构 -
可以
derived<int>::wrapped::base,derived<int>::intermediate::base... :/
标签: c++ templates inheritance c++17 multiple-inheritance