cppreference写道模板参数包是模板参数:
https://en.cppreference.com/w/cpp/language/parameter_pack
是真的吗?例如,编写这样的代码是否正确:
template<typename... Ts>
class MyClass {
std::unique_ptr<Ts...> m_data;
};
答案 0 :(得分:1)
是的,参数包是有效的模板 parameter ,用于声明。但是,当实例化模板 时,它会替换为实际提供的模板 arguments 的列表,请参见https://en.cppreference.com/w/cpp/language/template_parameters
例如在您的示例中,MyClass<int>
将包含std::unique_ptr<int>
,MyClass<int, MyDeleter>
将包含std::unique_ptr<int, MyDeleter>
,而MyClass<int, MyDeleter, Foo>
会导致编译器错误“模板参数数量错误”,因为{{ 1}}最多可以有两个。
答案 1 :(得分:0)
当然,可以想像一下,就好像在实例化MyClass
时写下了一系列类型(应为template<typename... T> class MyClass;
btw),然后将该序列准确地复制到std::unique_ptr
的实例化。 std::unique_ptr
最多接受两个参数,第二个参数很特殊,因此并非所有参数都能正常工作
int main() {
MyClass<int> this_compiles;
MyClass<int, std::default_delete<int>> as_does_this;
//MyClass<int, double, char> this_does_not;
//MyClass<> this_neither;
}
答案 2 :(得分:0)