Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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++_Function_C++11_Parameter Passing_Variadic Templates - Fatal编程技术网

C++ 用计数器展开参数包

C++ 用计数器展开参数包,c++,function,c++11,parameter-passing,variadic-templates,C++,Function,C++11,Parameter Passing,Variadic Templates,我想将参数包扩展为函数调用,如下所示: func(get_value(arg)...); func(get_value(arg0, 0), get_value(arg1, 1), get_value(arg2, 2)); 其中func和get_value是两个函数。问题是get_值对求值顺序很敏感,因此我认为一种解决方案是生成如下内容: func(get_value(arg)...); func(get_value(arg0, 0), get_value(arg1, 1), get_val

我想将参数包扩展为函数调用,如下所示:

func(get_value(arg)...);
func(get_value(arg0, 0), get_value(arg1, 1), get_value(arg2, 2));
其中func和get_value是两个函数。问题是get_值对求值顺序很敏感,因此我认为一种解决方案是生成如下内容:

func(get_value(arg)...);
func(get_value(arg0, 0), get_value(arg1, 1), get_value(arg2, 2));
例如,如果有三个参数。有了这个计数器,我就知道评估顺序了。这有办法吗

或者,作为另一种解决方案,是否有一种方法可以简单地指定这些调用的求值顺序,以使用args获取_值?(如果是这样,我甚至不需要计数器。)

您可以将参数包“压缩”在一起。因此,类似这样的情况,使用
seq
from的定义:


这保留了调用顺序,因为初始值设定项列表中的逗号是序列点。

您的意思是要严格从左到右计算
get\u值
调用,还是只传递0、1、2。。。够了吗?@T.C.正是。这就是我想要的。哪一个?从左到右,还是只传递额外的整数?或者。如果第一个解决方案不可能,我可以修改我的get_value函数来接收int。使求值顺序严格从左到右的方法是将
get_value
调用解包到带括号的init列表中(例如,将
get_value
调用的结果存储到数组或元组中,然后使用整数序列技巧)。但是g++有一个错误打破了这一点,所以现在使用第二种方法更方便。@WuZhenwei我刚刚为一个更受限制的情况添加了一个更简单的解决方案,以防它适用于您的问题。“这保留了调用顺序,因为初始值设定项列表中的逗号是序列点。”不完全如此。C++11中没有序列点。列表初始化规则保证严格的从左到右求值,但g++目前在这方面被破坏。嗯,看起来像“当前”“不完全正确。它显然在几天前发布的GCC 4.9.1中。