【发布时间】:2021-12-28 12:01:06
【问题描述】:
我正在尝试编写一个可变参数模板函数,其中包含一个循环,该循环遍历参数包中的每种类型。我正在使用它来构建一个元组,然后我在确定模板类型的回调函数上apply。
我想我可以使用sizeof...(Args) 来做到这一点,如下所示:
template <typename ...Args>
void addCallback(void* handle, std::string address, std::function<void(Args...)> callback)
{
return addMessageCallback(std::move(address), [callback](const ci::osc::Message& message) {
std::tuple<Args...> args;
for (size_t i = 0; i < sizeof...(Args); i++)
{
std::get<i>(args) = message.getArg<std::tuple_element_t<i, decltype(args)>(i);
}
std::apply(callback, std::move(args));
});
}
这不会编译,因为std::get<i>(args) 要求i 是编译时间常数。但是,所有信息在编译时都可用。有没有办法使这项工作?我曾考虑过使用折叠表达式,但
我正在使用 C++17。
【问题讨论】:
标签: c++ templates c++17 metaprogramming variadic-templates