草庐IT

c++ - 检查(原始)类型在 C++ 中是否可转换

是否可以检查(在C++中)类型是否可转换(隐式或显式)?std中是否有内容,或者是否可以像C#(C#sameQuestion)中那样编写一个函数?我想对类型而不是类型的实例执行此检查。我不确定C++中的类型系统。C#或Java中有类似Type类的东西吗?typeid(int)是我找到的最近的。我可以将类型存储到变量吗?仔细阅读提示将不胜感激。例如:boolisCastable(false);boolwithoutLoss(true);isCastable=isCastableFromTo(typeid(int),typeid(__int64),withoutLoss);//trueis

c++ - 根据模板变量类型执行不同的方法

有没有办法确定传递给模板的变量类型,并根据它是否为int来调用函数?或std::string等等……?例如templatestructJam{Jam(T*var){if(typeid(var)==typeid(std::string*)*var="Hello!";elseif(typeid(var)==typeid(int*)*var=25;}};当我尝试使用该代码时,出现错误invalidconversionfromconstchar*toint.我怀疑这是因为编译器将模板“扩展”为单独的函数,并且当我指定结构的新实例时throwJam(&setme);它检测到var*=25声明并拒

c++ - 是否可以从 C++ 中的模板类型获取 char* 名称

我想获取模板类型的字符串名称(constchar*)。很遗憾,我无法访问RTTI。templatestructSomeClass{constchar*GetClassName()const{return/*magicgoeshere*/;}}所以SomeClasssc;sc.GetClassName();//returns"int"这可能吗?我找不到办法,快要放弃了。感谢您的帮助。 最佳答案 不,它也不能可靠地与typeid一起工作。它将为您提供一些取决于编译器实现的内部字符串。int常见于“int”和“i”之类的东西.顺便说一句,

php - Mysql - 找不到特定记录的默认记录

使用MySQL和php,我如何在单个查询中获取与特定查询匹配的所有结果,但如果没有找到结果,则查找所有默认结果?例如我有这个查询:SELECT*FROMtable1WHEREtypeid=5如果从下面的查询中没有找到结果,那么我想从table1中找到typeid为1的所有结果:SELECT*FROMtable1WHEREtypeid=1我怎样才能在单个查询中做到这一点?如果我尝试以下查询,我会得到5和1:SELECT*FROMtable1WHEREtypeid=5ORtypeid=1我想做的是查询表1中所有分配有typeid为5的记录,如果没有找到结果,则在单个查询中获取分配给type

mysql - 1052 - 字段列表中的列 'typeid' 不明确

selectid,pubdate,typeid,aid,jobname,jobdepart,jobplace,jobnumber,jobcontactfromarchivesrightjoinjobrtonid=aidwheretypeid=191、表存档有fileds:id,pubdate,typeid...2、jobrt表有字段:aid,jobname,jobdepart,jobplace,jobnumber,jobcontact,typeid..3、id=援助现在,我想在typeid=19时选择出id列jobname,jobplacecomlumns,..谢谢

【C++】语法小课堂 --- auto关键字 & typeid查看实际类型 & 范围for循环 & 空指针nullptr

文章目录🍟一、auto关键字(C++11)🍩1、auto的简介🍩2、auto的使用细则🚩auto与指针和引用结合起来使用🚩在同一行定义多个变量🍩3、auto不能推导的场景1️⃣auto不能作为函数的参数2️⃣auto不能直接用来声明数组🍩4、auto使用的注意事项🍟二、基于范围的for循环(C++11)🍄1、范围for的语法🍄2、范围for的使用条件1️⃣for循环迭代的范围必须是确定的2️⃣迭代的对象要实现++和==的操作🍟三、指针空值nullptr(C++11)🚨注意:🍟一、auto关键字(C++11)🍩1、auto的简介🚩在早期C/C++中auto的含义是:使用auto修饰的变量,是具有

c++ - 使用typeid来处理不同的类型

我正在尝试使用boost::any来封装sqlite返回值。然后我尝试编写一个循环来打印这些。我的第一个想法是做这样的事情:for(boost::anyfield:row){switch(field.type()){casetypeid(double):doublevalue=any_cast(field);...break;casetypeid(othertype):...}}现在,对于有经验的程序员来说,这很明显是行不通的,因为typeid返回一个实例而不是数字id。经过一些研究,我想我可以试试typeid(...).hash_code()然而这还不够constexpr合格(除了散

c++ - 使用typeid来处理不同的类型

我正在尝试使用boost::any来封装sqlite返回值。然后我尝试编写一个循环来打印这些。我的第一个想法是做这样的事情:for(boost::anyfield:row){switch(field.type()){casetypeid(double):doublevalue=any_cast(field);...break;casetypeid(othertype):...}}现在,对于有经验的程序员来说,这很明显是行不通的,因为typeid返回一个实例而不是数字id。经过一些研究,我想我可以试试typeid(...).hash_code()然而这还不够constexpr合格(除了散

c++ - typeid(complex<double>(0.0,1.0)) != typeid(1.0i)

使用gcc4.9我发现使用类型文字生成的复数类型与通过常规方式创建的类型不同,即:typeid(complex(0.0,1.0))!=typeid(1.0i)我在这里犯错了吗?这是编译器错误还是预期的标准行为?如果预期的标准行为:背后的基本原理是什么?添加缺少的MCVE#includeusingstd::complex;usingnamespacestd::literals::complex_literals;#includeusingstd::cout;usingstd::endl;#includeintmain(intargc,char*argv[]){if(typeid(comp

c++ - typeid(complex<double>(0.0,1.0)) != typeid(1.0i)

使用gcc4.9我发现使用类型文字生成的复数类型与通过常规方式创建的类型不同,即:typeid(complex(0.0,1.0))!=typeid(1.0i)我在这里犯错了吗?这是编译器错误还是预期的标准行为?如果预期的标准行为:背后的基本原理是什么?添加缺少的MCVE#includeusingstd::complex;usingnamespacestd::literals::complex_literals;#includeusingstd::cout;usingstd::endl;#includeintmain(intargc,char*argv[]){if(typeid(comp