如何实现一组交替模板参数?
像这样:
template< ( unsigned non_type, typename type )... >
用法必须在什么地方
my_class< 5U, float,
6U, std::string >
我不想更改顺序,也不想在使用过程中将它作为一对包装器。显然,如果它在我自己的内部实现中变成某种配对,那很好。
最佳答案
关于模板要记住的是它们不是宏。他们没有复制代币。它们是实际的 C++ 结构。每个模板参数都必须是特定类型的:类型参数、非类型参数或必须指定其模板参数列表的模板-模板参数。模板参数的种类让编译器知道在特定位置使用该参数是否有意义。
例如,这是一段可能有意义的代码:
template<auto value>
auto foo() {return value + 1;}
这显然是胡说八道:
template<typename value>
auto foo() {return value + 1;}
编译器甚至不必等你实例化模板就可以关闭你。
使用参数包的唯一方法是在某个位置展开它。扩展参数包会将使用该包的模式应用于包的所有元素。构建类型和值都适合模式语法的场景非常困难。
当然,这并非不可能。例如,(pack(something), ...)
对于类型和非类型模板参数都是合法的。但他们不会做同样的事情。对于值,它将调用类型上任何可用的 operator()
;对于类型,它将调用构造函数来创建纯右值。
最普遍有用的情况是将异构包直接扩展到模板参数列表中。
然而,所有这些都是诡辩,因为 C++ 模板不是宏。模板参数必须是定义明确的类型,这样编译器才能知道它们是否被正确使用。这包括参数包。所以包中的所有元素必须属于同一类。你想要的是“universal template parameters”,但目前只是一个提议。
关于c++ - 交替模板参数包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61002624/