问题标签 [parameter-pack]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 通过模板参数传递数据,C++
我正在考虑在我的程序中使用颜色空间结构。现在您可以看到每个色彩空间对其每个组件都有其限制。所以考虑这样的结构。
现在我需要以某种方式定义一个范围,所以我创建了一个结构。
现在我需要我的颜色空间结构来了解其每个组件的范围。但正如你所见,我不能只保留std::array<Ranges<T>,N> ranges
我的结构,因为范围因类型而异。作为一个例子,考虑struct RGB
每个组件可能是float
左右unsigned char
,当组件是float
每个组件的范围[0,1];
时,它是 unsigned char 它是[0,255];
。为每种情况编写模板专业化是一种解决方案,但我想要这样的签名。using RGBFloat = RGB<float,Range<float>...>
. 我的意思是我想通过模板参数包传递范围。我知道例如Range<float>(0,1);
是一个非类型模板参数,所以一种解决方法是struct Range
像这样重构
所以我可以Range<T,T min, T max>
作为模板参数包传递,但是我必须将包保存在一个std::tuple
(我也不想要这个)。我的问题是您是否通过重构Range
结构或其他方式看到任何其他可能性以具有定义颜色空间的这种签名。using DefineColorSpace = ColorSpace<unsigned char, ranges....>
. 我知道这C++ 20
对非类型模板参数有很大的重构,但我正在使用clang
,似乎它们还不支持该功能。任何建议都会有所帮助,谢谢)
c++ - 如何创建模板嵌套模板参数包?
我正在尝试基于模板化参数构建一个仅转换动作的状态机,它可以调用另一个给定对象的成员函数。
所以一个单独的状态是一个单一的类。它应该有它的 state-id 并且还应该被赋予所有可能的事件以及它到具体状态的具体转换函数。
我尝试的是以下内容:
其中第二个模板参数包应根据其具体事件接受多个可能的转换。(一个所谓的“EventAction”的具体处理不是这里的主题)到目前为止编译器没有抱怨。
但是现在我被困在如何正确调用这个模板上。我需要为参数包模板创建一个具体的类吗?我想看看它如何使用它会是这样的:
我是在这里搞砸了,还是我的方法从一开始就错了?
我只能使用 C++11 和 C++14 的一些可能性,但不知何故不能使用全套(TI 的特殊编译器)。
c++ - 使用带有多个值的运算符 +=
我希望创建一个运算符 += 的模板,它将向向量添加值。我一直在修改参数包,但它对我不起作用(我想我作为 C++ 的新手做错了什么)。基本上我想用这样的代码实现添加到向量末尾的效果:
如您所见,我想通过运算符覆盖向向量添加多个值。这是我现在拥有的代码:
我收到一个错误,该表达式包含意外的参数包。如果不是参数包,那么如何通过覆盖运算符将这些值添加到向量中?
提前致谢
c++ - 模板类中的可变模板函数特化
我正在尝试实现一个自己的 SmartPointer 类,并且在初始工作版本之后,我开始改进代码,现在面临一个我无法解决的问题。
这是第一个版本:
我对此的问题是我必须调用它指定两次,这将是例如。“int”类型的指针:
因此,我尝试在 SmartPointer 类的构造函数中创建一个模板构造函数,方法是将其更改为:
这工作正常,直到我提供至少一个参数。但是当没有提供参数时,整个类开始根本不工作。(当我从它创建一个实例并尝试分配一个值时,它会引发以下错误:“只读位置'* intSP'的分配”。
所以我试图进一步复杂化它,在参数包的大小上使用 enable_if,不幸的是,结果与前一种情况相同。由于某种原因, enable_if 似乎根本没有做任何事情:
最后是完整的代码,有一些概述:
c++ - 解压多个参数包以初始化二维数组
我正在尝试解压缩多个参数包,以便arr[i][j] = X(i,j)
. 但是,使用下面的当前方法出现以下错误。有没有使用 C++14/17 实现上述目标的方法?
错误
c++ - 错误:参数打包类模板中类模板的参数过多
我创建了一个主模板和两个特化:一个用于 void 类型,另一个是用于不同参数类型的参数包。
后台是一个“连接”引擎,用来连接返回void的成员函数,所以我不需要返回类型,只需要参数类型。这些类就像包装器一样,提供了一个语法友好的静态函数来创建具体的链接。
所以我的代码如下所示:
一旦我打电话给这样的事情:
我得到那个编译错误:错误:类模板的参数太多。
打电话时
按预期工作
我不明白的是,我创建了另一个具有返回类型和相同主模板的版本:
如果我打电话给他们,一切都很好并且工作:
我不明白我在这里做错了什么。
此外,Callee 类可以查看模板和构造函数。
当然,还有一个 Callee 类,其返回类型也适用于其他解决方案。
c++ - 从参数包的最后一个可能的类中获取成员
我想获取参数包中最后一个可能类的成员变量的值。
例如。我想getLastB(a_, b_, c_, d_)
在下面的代码中返回 100(c_.b 的值),而不是 40(b_.b 的值)
但是,当我尝试编译此代码时,出现错误
如果我注释我从 main 调用 getLastB 的行,代码编译并且它确实给出了 4 个打印语句的预期值。
有什么想法我可能在这里做错了吗?
c++ - How to get element from parameter pack?
This is my current code that works, with using 1
as a place holder for the variable. Although when I replace 1
with a variable (I tried both size_t
and int
in the arguments for getParameterPackVals
) it does not work.
Is this a gap in my understanding of how the std::get
function works? Is there a way to make this work as is or would I need to write an entirely new function?