c++ - 用计数器扩展参数包

标签 c++ function c++11 parameter-passing variadic-templates

我想将一个参数包展开成一个函数调用,像这样:

func(get_value(arg)...);

其中 func 和 get_value 是两个函数。问题是 get_value 对评估顺序很敏感,所以我认为一种解决方案是生成如下内容:

func(get_value(arg0, 0), get_value(arg1, 1), get_value(arg2, 2));

例如,如果有三个参数。有了这个计数器,我就会知道评估顺序。这有办法吗?

或者作为另一种解决方案,有没有一种方法可以简单地指定这些调用 get_value 的评估顺序? (如果是这样,我什至不需要计数器。)

最佳答案

您可以将参数包“压缩”在一起。所以,像这样,使用来自 hereseq 的定义:

template <typename ... Args, int ... N>
void F(Args... args, seq<N...>)
{
func(get_value(args, N)...);
}

template <typename ... Args>
void FHelper(Args&&... args)
{
 F(std::forward<Args>(args)..., typename gens<sizeof...(Args)>::type ());
}

然后您将调用 FHelper

get_value 具有固定返回类型的情况下,一个更简单的解决方案是更改 func 以将 initializer_list 作为输入并像这样调用它:

func({get_value(args)...});

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

关于c++ - 用计数器扩展参数包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25091436/

相关文章:

c++ - 将异步与多态成员函数一起使用

compiler-construction - g++ 如何检查它是否支持 lambda 函数?

c++ - 在 C++ 中的 sleep 期间忽略键盘输入?

c++ - Visual Studio 中谷歌测试的工作目录

c++ - boost::shared_ptr 与 vector 一起使用很慢?

python - 如何从函数中获取结果(输出)?以后如何使用结果?

Javascript - 使函数为每个 div 返回唯一的结果

c++ - ncurses 中的 system() 输出

javascript - 在函数内运行函数

c++ - 为什么我们总是检查输入是否失败而不是输出?