首页 > 其他分享 >模板函数使用类型推导时的bug

模板函数使用类型推导时的bug

时间:2024-04-12 16:12:09浏览次数:22  
标签:control typeid code val 推导 json bug 模板 balcony

template
static bool parse_a_value(T& val, Json::Value json_val)
{
if(json_val.isNull()) return false;

if(typeid(val) == typeid(int)
    || typeid(val) == typeid(int16_t)
    || typeid(val) == typeid(int8_t)
    || typeid(val) == typeid(int32_t))
{
    val = json_val.asInt();
}

if(typeid(val) == typeid(uint8_t)
    || typeid(val) == typeid(uint16_t)
    || typeid(val) == typeid(uint32_t))
{
    val = json_val.asUInt();
}

if(typeid(val) == typeid(int64_t)) val = T(json_val.asInt64());
if(typeid(val) == typeid(uint64_t)) val = T(json_val.asUInt64());
if(typeid(val) == typeid(float)) val = T(json_val.asFloat());
if(typeid(val) == typeid(double)) val = T(json_val.asDouble());
// if(typeid(val) == typeid(std::string)) val = T(json_val.asString());

return true;

}

25行报错

./task_control: /usr/local/lib/libuuid.so.1: no version information available (required by ./task_control)
[2023-12-21 15:51:28.811] [console] [info] [main.cpp:138] =====>val type:i/6253375586064260614 NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE/5774750460303204477, false
^C
huanglidi@hld-vm:~/work/code/balcony/balcony_painting/spray_control/build$ 
huanglidi@hld-vm:~/work/code/balcony/balcony_painting/spray_control/build$ make -j8
Scanning dependencies of target task_control
[  1%] Building CXX object CMakeFiles/task_control.dir/src/route_generate.cpp.o
/home/huanglidi/work/code/balcony/balcony_painting/spray_control/src/route_generate.cpp: In instantiation of ‘bool parse_a_value(T&, Json::Value) [with T = double]’:
/home/huanglidi/work/code/balcony/balcony_painting/spray_control/src/route_generate.cpp:83:49:   required from here
/home/huanglidi/work/code/balcony/balcony_painting/spray_control/src/route_generate.cpp:70:48: error: invalid cast from type ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ to type ‘double’
     if(typeid(val) == typeid(std::string)) val = T(json_val.asString());
                                                ^
/home/huanglidi/work/code/balcony/balcony_painting/spray_control/src/route_generate.cpp: In instantiation of ‘bool parse_a_value(T&, Json::Value) [with T = unsigned int]’:
/home/huanglidi/work/code/balcony/balcony_painting/spray_control/src/route_generate.cpp:87:47:   required from here
/home/huanglidi/work/code/balcony/balcony_painting/spray_control/src/route_generate.cpp:70:48: error: invalid cast from type ‘std::__cxx11::string {aka std::__cxx11::basic_string<char>}’ to type ‘unsigned int’
CMakeFiles/task_control.dir/build.make:964: recipe for target 'CMakeFiles/task_control.dir/src/route_generate.cpp.o' failed

测试代码

#include <typeinfo>

template<typename T>
static bool parse_a_value(T& val,Json::Value &root)
{
    bool b = (typeid(val) == typeid(std::string));

    Rotating_Info("=====>val type:{}/{} {}/{}, {}", typeid(val).name(), 
    typeid(val).hash_code(),
    typeid(std::string).name(), typeid(std::string).hash_code(), b);
    
    if(b) 
    {
        Rotating_Info("=====>1111");
        // val = root.asString();
    }
    return true;
}


## 原因与解决方法?

标签:control,typeid,code,val,推导,json,bug,模板,balcony
From: https://www.cnblogs.com/HuangLiDi/p/18131527

相关文章

  • SOLIDWORKS模板批量修改工具 慧德敏学
    SOLIDWORKS批量修改模板插件-SolidKits.BOMs工具可实现工程图模板的批量替换,单位系统的批量修改,批量定义模型材质等功能。操作简单快捷,只需要提前打开SOLIDWORKS软件,执行后程序会自动完成所有替换操作。使用SOLIDWORKS绘制工程图之前,必须要选择工程图模板,模板中我们会定义好图幅......
  • C++陷阱 — C++ auto变量类型推导
    问题描述C++使用auto类型声明一个单例对象的引用时,通过该auto变量来访问单例,是否等同于使用单例类::Instance()来访问单例呢?试看如下的例子:#include<stdint.h>#include<iostream>#include<string>#include<map>usingnamespacestd;classSingleClass{public:......
  • pycharm使用debug模式调试不生效问题
    1、设置中配置 TRANSLATEwithxEnglishArabicHebrewPolishBulgarianHindiPortugueseCatalanHmongDawRomanianChineseSimplifiedHungarianRussianChineseTraditionalIndonesianSlovakCzechItalianSlovenianDanishJapaneseSp......
  • Vant之日期选择BUG修复
    我连续使用两个Vant的日期组件,但是选中第一个日期组件的结果显示到第二个日期组件上了,HTML代码为:<divv-if="item.type==='date'&&!item.allowShowYearAndMonth"class="time"><van-field:label="item.label"v-model="mainFo......
  • 推导式(OPPO23届秋招-后端真题)
    题面核心思想建立一个有向图从c作为起点dfs同时做访问标记时间复杂度o(n)然后所有访问过的都是能推导的时间复杂度o(n)最终复杂度o(n)代码importjava.util.*;publicclassMain{staticfinalintMAXN=(int)(1e4+10);staticList<Integer>[]next;......
  • 一个bug引发的Android分区存储的思考
    **问题:**在安卓手机上实现保存图片的功能,部分手机保存失败。报了如图一的错误: 根据报错信息是没有权限,但仔细在代码内检查是有申请到存储权限的,并且该功能在其他手机上没问题**实现流程:**仔细看我们的实现流程如图二所示: 整个过程看上去都没问题。但是在出现问题的手机上,使......
  • 记录真实项目中遇到的bug--007:排序展示bug
    T07:排序展示bug:1.优先级:T22.前提条件:用户A打开日历3.预期结果:日历行程展示按照业务提供的sort顺序进行排序。4.实际结果:日历行程展示的时间段在9点之前的顺序不符合预期。5.缺陷跟踪:后端按照sort字段排序,更改为9点之前的时间段前面加0,例如原先的9:45,改为09:45,后达到预期......
  • 深入解析C++的auto自动类型推导
    关键字auto在C++98中的语义是定义一个自动生命周期的变量,但因为定义的变量默认就是自动变量,因此这个关键字几乎没有人使用。于是C++标准委员会在C++11标准中改变了auto关键字的语义,使它变成一个类型占位符,允许在定义变量时不必明确写出确切的类型,让编译器在编译期间根据初始值自动......
  • 软件开发文档模板全套合集(开发+实施+运维+安全+交付)
    前言:在软件项目管理中,每个阶段都有其特定的目标和活动,确保项目的顺利进行和最终的成功交付。以下是软件项目管理各个阶段的详细资料:软件项目全套文档资料下载:点我获取1.需求阶段目标:收集、分析和定义用户需求和业务目标。主要活动:需求调研:与用户沟通,了解他们的需求和期......
  • 实用算法模板——滑动窗口
    为了更好的说明这个问题,我们借用acWing上的一道题目模拟样例:解法一:使用stl中的双端队列求解解法二:使用数组模拟队列,运行速度更快如果还有疑问,可参考:C15【模板】单调队列滑动窗口最值_哔哩哔哩_bilibili希望对你有所帮助,感谢查看!......