Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将不同类型的模板参数包提取到双精度向量中会产生警告_C++_C++11_Templates_Parameter Pack - Fatal编程技术网

C++ 将不同类型的模板参数包提取到双精度向量中会产生警告

C++ 将不同类型的模板参数包提取到双精度向量中会产生警告,c++,c++11,templates,parameter-pack,C++,C++11,Templates,Parameter Pack,我试图将基本相同但参数数量不同的类转换为单个模板类。因此,我创建了一个模板类示例(不是真正的代码-只是示例): //模板类型 模板 类测试程序模板 { 公众: 作废流程(Args…Args) { //创建一个向量将参数放入其中。使用double,因为它可以容纳所有类型 //我正在使用的(对我来说已经足够好了)。但是我收到了很多“缩小”的警告 //这是可以理解的,但我不希望有任何警告(某种形式的对某个问题的批评) //参数包??) std::vector args_vect={args…}; 用于

我试图将基本相同但参数数量不同的类转换为单个模板类。因此,我创建了一个模板类示例(不是真正的代码-只是示例):

//模板类型
模板
类测试程序模板
{
公众:
作废流程(Args…Args)
{
//创建一个向量将参数放入其中。使用double,因为它可以容纳所有类型
//我正在使用的(对我来说已经足够好了)。但是我收到了很多“缩小”的警告
//这是可以理解的,但我不希望有任何警告(某种形式的对某个问题的批评)
//参数包??)
std::vector args_vect={args…};
用于(自动参数:参数)
{

std::cout是的,您可以轻松地转换参数:

std::vector<double> args_vect = {static_cast<double>(args)...};
请注意,如果constexpr
,则需要
,如果
,则需要不规则的
,因为否则,当参数数量不匹配时,代码将无法编译


这是一个。

是的,您可以轻松地转换参数:

std::vector<double> args_vect = {static_cast<double>(args)...};
请注意,如果constexpr
,则需要
,如果
,则需要不规则的
,因为否则,当参数数量不匹配时,代码将无法编译



这里有一个。

强制转换,就像你通常会做的那样:
{static_Cast(args)…}
我只是想把参数包提取到一个我可以迭代的结构中,我所做的是明智的,还是有更好的方法?取决于你想做什么。对于instace,如果你只想打印所有的参数,你可以使用
((std::cout@NathanOliver-太简单了!-我想我太害怕了,甚至不敢尝试-谢谢,尽管出于某种原因,我不得不在
(args…
-我可以看出这是错误的:)@NathanOliver我想计算arg的数量,并将它们传递到一个特定的函数中,该函数根据另一个模板类型X(例如,
typename X
)获取特定数量的arg-但我不想混淆最小的示例:oNo担心。要获得参数的计数,请使用
sizeof…(args)
/
sizeof…(args)
这将为您提供参数packCast中的number are元素,就像您通常使用的那样:
{static_cast(args)…}
我只是想将参数包提取到一个可以迭代的结构中,我所做的是明智的,还是有更好的方法?取决于您想做什么。对于Instance,如果您只想打印所有参数,您可以使用
((std::cout@NathanOliver-太简单了!-我想我太害怕了,甚至不敢尝试-谢谢,尽管出于某种原因,我不得不在
(args…
-我可以看出这是错误的:)@NathanOliver我想计算arg的数量,并将它们传递到一个特定的函数中,该函数根据另一个模板类型X(例如,
typename X
)获取特定数量的arg-但我不想混淆最小的示例:oNo担心。要获得参数的计数,请使用
sizeof…(args)
/
sizeof…(args)
这将为您提供参数packthanks中的number are元素!-正如向Nathan提到的-现在看起来很明显:oNo担心。当您习惯它时,一切都变得很明显:)还添加了@NathanOliver的替代答案,并提供了一个演示。非常感谢,你看到我的最后一条评论了吗?我实际上不想把它们打印出来,我想计算参数,然后将参数传递给一个具有特定数量参数的函数(因此我不能作为参数包传递)…可能吗?当然,还添加了一个演示。谢谢!-正如内森提到的-现在看起来很明显:小野担心。当你习惯了,一切都变得很明显:)还添加了@NathanOliver的替代答案,并提供了一个演示。非常感谢,你看到我的最后一条评论了吗?我实际上不想把它们打印出来,我想计算参数,然后将参数传递给一个具有特定数量参数的函数(因此我不能作为参数包传递)…可能吗?当然,还添加了一个演示。
std::vector<double> args_vect = {static_cast<double>(args)...};
void process(Args... args)
{
   ((std::cout << args << " "), ...);
   std::cout << std::endl;
};
void process1arg(double ) {}
void process2arg(double , double ) {}
void process3arg(double , double  , double ) {}

void process(Args... args)
{  
    ((std::cout << args << " "), ...);
    std::cout << std::endl;

    if constexpr (sizeof...(args) == 1)
       process1arg(args...);
    if constexpr (sizeof...(args) == 2)
       process2arg(args...);
    if constexpr (sizeof...(args) == 3)
       process3arg(args...);
};