gpt4 book ai didi

c++ - 可变模板参数解包

转载 作者:太空狗 更新时间:2023-10-29 21:02:28 24 4
gpt4 key购买 nike

对于每个参数,我需要应用两个嵌套函数:

obj.apply(someFilter(arg)); // arg is one argument, but here
// should be an unpacking of args

我不知道如何为这种情况编写解包。

我看到了这个:

 pass{([&]{ std::cout << args << std::endl; }(), 1)...};

on wiki ,但又不知道如何将其应用到我的案例中。

最佳答案

其实很简单:您可以将任意表达式放入可变参数模板参数包的解包中:

obj.apply(someFilter(arg))...

这将为您提供 obj.apply 作为逗号分隔列表的结果。然后你可以将它传递给一个虚拟函数:

template<typename... Args> swallow (Args&&...) {}
swallow(obj.apply(someFilter(arg))...);

吞下逗号分隔列表。

当然,这假设 obj.apply 返回某种对象。如果没有,你可以使用

swallow((obj.apply(someFilter(arg)), 0)...);

制作实际的(非void)参数

如果您不知道 obj.apply` 返回什么(结果可能使逗号运算符重载),您可以通过使用禁用自定义逗号运算符

swallow((obj.apply(someFilter(arg)), void(),  0)...);

如果您真的需要按顺序评估项目(从问题来看这似乎不太可能),您可以滥用数组初始化语法而不是使用函数调用:

using Alias=char[];
Alias{ (apply(someFilter(args)), void(), '\0')... };

关于c++ - 可变模板参数解包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15276991/

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