gpt4 book ai didi

c++ - 交替模板参数包

转载 作者:行者123 更新时间:2023-12-01 14:25:41 25 4
gpt4 key购买 nike

如何实现一组交替模板参数?

像这样:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com