【发布时间】:2022-11-17 14:06:58
【问题描述】:
是否可以将一些 void* 指针放入具有运行时生成的索引的变体中。
这个不错的解决方案(来自link)是否可以更新以获取指向 emplace 的索引和指针?
#include <variant>
template <typename... Ts, std::size_t... Is>
void next(std::variant<Ts...>& v, std::index_sequence<Is...>)
{
using Func = void (*)(std::variant<Ts...>&);
Func funcs[] = {
+[](std::variant<Ts...>& v){ v.template emplace<(Is + 1) % sizeof...(Is)>(); }...
};
funcs[v.index()](v);
}
template <typename... Ts>
void next(std::variant<Ts...>& v)
{
next(v, std::make_index_sequence<sizeof...(Ts)>());
}
可以获得所需的数据类型是可能的,但无论如何不要认为它有帮助
Func funcs[] = {
[](MessageTypesVariant& v) {
auto y = std::get<(Is)>(v);
auto z = std::forward<decltype(y)>(y);
v.template emplace<(Is)>(); }...
};
【问题讨论】:
-
您是否正在寻找类似这样的签名:
template <typename... Ts> void next(std::variant<Ts...>& v, const std::tuple<Ts>& value_to_emplace)? -
最后,我需要这样的东西(虽然不知道是否可能):
template <typename... Ts> void next(std::variant<Ts*...>& v, int typeIndex, void* ptrToData)
标签: c++ templates std-variant