You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合已删除函数特化使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 06:30:24