gpt4 book ai didi

c++ - 如何通过 std::apply 调用具有定义的第一个参数的可变参数模板函数?

转载 作者:行者123 更新时间:2023-11-30 01:01:47 29 4
gpt4 key购买 nike

我对参数包比较陌生,但我想构建一个类来接收参数包,收集其中包含的值并将它们启动到另一个函数中。

我有一个具有可变参数模板的类和一个分配值的函数。函数正在从 VARIANT 结构中获取参数。

解包函数:

 template <typename...Args>
constexpr void ValuesFromValuesVariant(VARIANT variant, Args&...args)
{
static std::size_t nArgs = sizeof...(Args);
if (!nArgs) return;
auto vArray = GetArray(variant, nArgs);

auto i = 0u;
GetNextItem(vArray, i, args);
}

使用它的类:

template <class ...Args>
class Receiver
{
using SendFunction = std::function<HRESULT(Args...)>;
using InterruptFunc = std::function<HRESULT()>;
...
virtual HRESULT OnSend(VARIANT params)
{
//Here I'd like to call it with a VARIANT, but I can't for some reason
std::apply(ValuesFromValuesVariant, params, std::tie(arguments)); //std::tie to get refs& to the arguments

HRESULT hr = std::apply(m_Function, arguments);
return hr;
}
private:
InterruptFunc m_InterruptFunc;
SendFunction m_Function;
private:
std::tuple< Args... > arguments;
};

我试过 std::bind 第一个函数参数,但它不能自动预测它接受的参数, VariantCommunication::ValuesFromValuesVariant<Args>说明符不起作用。

最佳答案

要将 apply 与元组之外的参数一起使用,您可以在仿函数中捕获它:

std::apply([&](auto&... args){ ValuesFromValuesVariant(params, args...); }, arguments);

或将额外参数连接到元组:

std::apply(&ValuesFromValuesVariant, std::tuple_cat(std::tie(params), arguments));

关于c++ - 如何通过 std::apply 调用具有定义的第一个参数的可变参数模板函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58204535/

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