如何结合已删除函数特化使用std::visit实现字符串泛型解析?
泛型字符串解析实现尝试
我尝试基于现有知识实现泛型字符串解析逻辑:将字符串str传入带有目标类型特化的convert()函数,并借助std::visit()来调用对应类型的重载版本。具体示例代码如下:
#include <iostream> #include <variant> #include <vector> #include <charconv> template <class ...Request, class ...Types> constexpr bool holdsAlternative(const std::variant<Types...>& v) noexcept { return (std::holds_alternative<Request>(v) || ...); } template <typename T> T convert(const std::string &str) = delete; template <> float convert<float>(const std::string &str) { float result = 0; std::from_chars(str.data(), str.data() + str.size(), result); return result; } template <> int32_t convert<int32_t >(const std::string &str) { int32_t result = 0; std::from_chars(str.data(), str.data() + str.size(), result); return result; } using data_type = std::variant<int32_t, float, std::string>; std::vector<data_type> Types {float{}, int32_t{}, std::string{}}; int main() { std::string str{"123"}; bool r = holdsAlternative<int32_t, float>(Types[1]); if (r) { std::visit([&](auto &t) { return convert<decltype(t)>(str); }, Types[1]); } }
内容的提问来源于stack exchange,提问作者Libra
相关产品推荐
相关产品推荐

