这是否有效:https://godbolt.org/z/_i9dwf
#include <typeinfo>
#include <iostream>
template<typename T>
struct Container
{
};
void fn()
{
return;
}
template<typename T, typename...type_pack>
void fn(const Container<T>& head, const Container<type_pack>&... args)
{
std::cout << "I am an " << typeid(T).name() << "\n";
fn(args...);
return;
}
int main()
{
fn(Container<int>{}, Container<float>{});
return 0;
}
C ++是否实际上允许这种扩展,或者该实现是基于编译器定义的?我不相信我所看到的这种类型的语法的其他地方使用:Container<type_pack>&...
。这只是我想实现的目标,而令人惊讶的是它起作用了。所以我的问题是,这是UB,还是在标准中有明确提到的定义明确?
您要指定数量可变的参数,这些参数是类型的Container
,其模板类型将用于推导type_pack
。例如,如果您致电:
fn(Container<int>{}, Container<float>{});
该type_pack
会代表一个float
类型。但是,如果您致电:
fn(Container<int>{}, Container<float>{}, Container<int>{}, Container<std::string>{});
该type_pack
会代表的参数组float, int, std::string
。
该行为已由标准明确定义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句