好奇的混合与可变参数构造函数

Curious Mixin with variadic constructor

本文关键字:变参 参数 构造函数 混合 好奇      更新时间:2023-10-16

我剪了一个代码,包括某种可变参数混合 crtp 和一些相关问题。我是否正确理解在下面的代码中,第二个构造函数只是将用于实例化 X 的那些类的实例的副本传递给这些相同类的构造函数?

template<class DerivedT>
struct CuriousBase{};
template<template<typename> typename... Features>
struct X : Features<X<Features...>> ... {
X() = default;
X(Features<X<Features...>> ...f) : Features<X<Features...>>(f)... {}
};
int main(){
auto x = X<CuriousBase>{};
}

这种行为的用例是什么,此示例与以下代码片段之间有什么区别?

template<class DerivedT>
struct CuriousBase{};
template<template<typename> typename... Features>
struct X : Features<X<Features...>> ... {
X() = default;
X(Features<X> ...f) : Features<X>(f)... {}
};
int main(){
auto x = X<CuriousBase>{};
}

两者都可以编译,但我认为,必须明确指定 X 本身就是一个可变参数类模板,但这似乎不是必需的......

非常感谢帮助

X是一个注入的类名,所以XX<Features...>在类中是等价的。