提问人:Clutterhead 提问时间:9/14/2023 最后编辑:jonrsharpeClutterhead 更新时间:9/14/2023 访问量:85
使用变体向量调用正确的函数专用化
Calling the correct function specialization using a vector of variants
问:
我有一个变体向量和几个完全专业化的函数。现在我想根据向量的元素调用正确的函数,而无需检查每个单独的元素(这是我目前正在第二个向量的帮助下所做的)。我甚至不需要获取变体向量中的值,我只需要获取类型。
有谁知道某种模板诡计可以帮助我?还是我认为没有比这更优雅的方法了?
#include <vector>
#include <variant>
using valType = std::variant<int, unsigned long, float, double>;
// Base Case
template<typename... Ts>
void func(Ts...);
// Full Specializations
template<>
void func(unsigned long);
template<>
void func(double, double);
template<>
void func(float, double);
int main()
{
std::vector<valType> values;
// In theory there is a second vector which encodes the types into ints:
// std::vector<int> types
values.emplace_back( float{} );
// types.emplace_back(2)
values.emplace_back( double{} );
// types.emplace_back(3)
// What I currently do is check if types[0] == 2 and types[1] == 3,
// so I know to call func(float, double).
// Is there a more elegant way figuring out I want to call func(float, double)?
return 0;
}
答: 暂无答案
评论
std::tuple
std::visit([](auto x, auto y) { func(x, y); }, values[0], values[1]);