gpt4 book ai didi

c++ - 使用可变参数模板的 mixin 继承的可见性规则

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:34:06 26 4
gpt4 key购买 nike

假设我从可变参数模板继承了整个参数列表。参数是如何继承的?

// snippet
template<typename... R>
class foo
: public R... {
public:
};
// ....
using foo_inst = foo<bar_1, bar_2>;

我试过了,似乎所有 R 都是公共(public)继承的(不仅仅是第一个)。 这是定义的行为吗?

我用 gcc 和 msvc 试过了(感谢 jaggedSpire 也用了 clang),结果都一样。编译器甚至没有提到任何警告。你可以看到一个运行示例 here .

最佳答案

是的,这是定义的行为。引用自 14.5.3[temp.variadic]\4

A pack expansion consists of a pattern and an ellipsis, the instantiation of which produces zero or more instantiations of the pattern in a list (described below). The form of the pattern depends on the context in which the expansion occurs. Pack expansions can occur in the following contexts:

该列表中的相关上下文是:

— In a base-specifier-list (Clause 10 ); the pattern is a base-specifier.

因此,在参数包扩展 class foo : public R... 中,模式是 base-specifier public R,使由 T1, T2, ... , Tn 类型组成的包扩展为 public T1, public T2, ... , public Tn。 (上一句中的省略号是在数学序列指定意义上使用的。)

关于c++ - 使用可变参数模板的 mixin 继承的可见性规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31388928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com