可变参数模板中“...”标记的语法规则
在 C 中,可变参数模板可以构造接受参数数量可变。 “...”标记在此上下文中起着至关重要的作用,充当参数包或参数解包器。
省略号放置的语法规则
The “...”标记的位置决定了其功能:
示例:带有“...”的可变参数模板
考虑以下可变参数模板:
template
unique_ptr make_unique( Args&&... args )
{
return unique_ptr(new T(std::forward(args)...));
}
在此示例中,“...”用作参数包,而函数实现中的“...”将参数解包到 args 变量中。
省略号放置不同的原因
模板参数列表和参数列表之间省略号放置的差异是由于参数打包和参数解包之间的区别造成的。在模板参数列表中,“...”表示参数应打包为单个参数包,而在参数列表中,“...”表示参数应解包为单独的参数。
解包模式
当“...”作为解包器出现在表达式的右侧时,它遵循特定的模式:
高级用法:初始化数组
省略号也可用于初始化数组:
struct data_info
{
boost::any data;
std::size_t type_size;
};
std::vector v{{args, sizeof(T)}...}; //pattern = {args, sizeof(T)}
这用值初始化向量 v,其中每个元素都是包含 args 和 sizeof(T) 对的结构体。
结论,可变参数模板上下文中的“...”标记既充当参数包又充当参数解包器,遵循放置和解包模式的特定语法规则。其灵活的使用允许强大的模板构造和定制。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3