如何比较C++;? 有没有一种比较C++中变量类型的方法?例如,我想要这样的东西:(使用伪语言) 模板无效检查类型(T变量){ if(类型(T)=int)cout iter->key){ iter=l.next(iter); } l、 插入(国际热核实验堆,k,a); } else if(相同::值){ while(iter!=NULL和tolower(k)>tolower(iter->key)){ iter=l.next(iter); } l、 插入(国际热核实验堆,k,a); } //在“keytype”中通过模板传递的任何类型都会进入这个if语句 else if(相同::值){ bool node_filled=false; if(iter==NULL){ l、 插入(国际热核实验堆,k,a); 节点_filled=true; } 否则{ 无符号长rif=0; int i=0; 而(!node_filled and iter!=NULL){ 如果(tolower(iter->key.at(0))>tolower(k.at(0))){ l、 插入(国际热核实验堆,k,a); 节点_filled=true; } 否则如果(tolower(iter->key.at(0))key.at(0))==tolower(k.at(0))){ 如果(k.size()>iter->key.size()) rif=iter->key.size(); 其他的 rif=k.size(); 而((ikey.at(i))){ i++; } 如果(tolower(iter->key.at(i))>tolower(k.at(i))){ l、 插入(国际热核实验堆,k,a); 节点_filled=true; } 否则如果(tolower(iter->key.at(i))==tolower(k.at(i))){ 如果(k.size()key.size()){ l、 插入(国际热核实验堆,k,a); 节点_filled=true; } 否则{ iter=l.next(iter); } } 否则如果(tolower(iter->key.at(i))运算符,返回 STD::Type OnngIs,这可以用两种方式使用。
您可以尝试以下方法:如何比较C++;? 有没有一种比较C++中变量类型的方法?例如,我想要这样的东西:(使用伪语言) 模板无效检查类型(T变量){ if(类型(T)=int)cout iter->key){ iter=l.next(iter); } l、 插入(国际热核实验堆,k,a); } else if(相同::值){ while(iter!=NULL和tolower(k)>tolower(iter->key)){ iter=l.next(iter); } l、 插入(国际热核实验堆,k,a); } //在“keytype”中通过模板传递的任何类型都会进入这个if语句 else if(相同::值){ bool node_filled=false; if(iter==NULL){ l、 插入(国际热核实验堆,k,a); 节点_filled=true; } 否则{ 无符号长rif=0; int i=0; 而(!node_filled and iter!=NULL){ 如果(tolower(iter->key.at(0))>tolower(k.at(0))){ l、 插入(国际热核实验堆,k,a); 节点_filled=true; } 否则如果(tolower(iter->key.at(0))key.at(0))==tolower(k.at(0))){ 如果(k.size()>iter->key.size()) rif=iter->key.size(); 其他的 rif=k.size(); 而((ikey.at(i))){ i++; } 如果(tolower(iter->key.at(i))>tolower(k.at(i))){ l、 插入(国际热核实验堆,k,a); 节点_filled=true; } 否则如果(tolower(iter->key.at(i))==tolower(k.at(i))){ 如果(k.size()key.size()){ l、 插入(国际热核实验堆,k,a); 节点_filled=true; } 否则{ iter=l.next(iter); } } 否则如果(tolower(iter->key.at(i))运算符,返回 STD::Type OnngIs,这可以用两种方式使用。,c++,variables,typeof,typeid,C++,Variables,Typeof,Typeid,您可以尝试以下方法: template <class T> void checkType(T variable) { switch(sizeof(T)){ case sizeof(int) : cout << "The variable is of type int.\n"; break; case sizeof(char): cout << "The var
template <class T> void checkType(T variable) {
switch(sizeof(T)){
case sizeof(int) :
cout << "The variable is of type int.\n";
break;
case sizeof(char):
cout << "The variable is of type char.\n";
break;
}
}
模板无效检查类型(T变量){
开关(尺寸(T)){
案例大小(整数):
你能帮我做这项工作吗
#包括
#包括
#包括
使用名称空间std;
样板
无效打印(T值){
如果(is_same::value)无法查看EDIT 2中的代码,您可能希望使用它(假设是符合C++17的编译器)。这里的问题是,编译器通常需要对if语句的所有分支的代码进行语法检查,即使从逻辑上讲,对于给定的模板实例化可能只能使用一个分支
if constexpr
放宽了这一要求:未被调用的分支被“丢弃”,这意味着如果不使用该分支,则依赖于模板参数的值不会被实例化。这意味着它永远不会尝试执行,例如,k.at(0)
当keytype
是int
时,因为如果是这种情况,我们将不会进入该分支
假设编译器支持C++ 17(标准启用),在代码中替换所有的<代码>如果应修复此特定问题。 < P> C++中有<代码> Type ID()/Calth>运算符,返回<代码> STD::Type OnngIs<代码>,这可以用两种方式使用。
您可以像这样使用std::type\u info::hash\u code()
:
template<typename T>
void print()
{
if (typeid(T).hash_code() == typeid(char).hash_code())
std::cout << "char\n"
else if (typeid(T).hash_code() == typeid(int).hash_code())
std::cout << "int\n"
else if (typeid(T).hash_code() == typeid(std::string).hash_code())
std::cout << "std::string\n"
}
template<typename T>
void print()
{
std::cout << typeid(T) << '\n';
}
只需注意后者,如果您输入类似于std::string
,您将得到类似于class std::basic_string
的输出。这只是因为std::string
是一个使用定义class std::basic_string
编辑:我忘了说,你需要一个#include
来使用std::type_info
std::is_same::value
?Algirdas是对的,而且,如果你想在if
语句中做一些只针对测试的特定类型进行编译的事情,你可以做类似if constexpr(std::is_same v)std::coutstd::is_same::value
会为这个确切的问题提供一个很好的布尔值,但在实践中并不常见,因为有很多其他事情可以与其他事情一起进行类型比较,选择正确的工具需要上下文和更广泛问题的视图。那么…你是什么呢真的解决了吗?我有一个自己制作的LinkedList类,我想根据通过模板传递的列表类型制作一个排序算法。有什么错误吗?这甚至对内置类型都不起作用。当struct
s和class
es起作用时,这将更加有效。sizeof
不是每种类型唯一的。Sizeof确实返回变量的长度(以字节为单位)。因此,如果键入sizeof(char变量),它将为任何不取决于其内容的char变量返回1字节。对于向量,它将返回其类型大小乘以其分配数。对于其他类型也是如此。给定std::vector little={1,2,3};std::vector large={1,2,3,4,5,6,7,8,9,10};
,sizeof(little)==sizeof(large)
,所以您在这里错了。另一个示例:struct foo1{int x;};struct foo2{short s1;short s2;};
。假设short
是2个字节,int
是4个字节,sizeof(foo1)==sizeof(foo2)
。但是foo1
和foo2
是虚拟的
template <class T> void checkType(T variable) {
switch(sizeof(T)){
case sizeof(int) :
cout << "The variable is of type int.\n";
break;
case sizeof(char):
cout << "The variable is of type char.\n";
break;
}
}
template<typename T>
void print()
{
if (typeid(T).hash_code() == typeid(char).hash_code())
std::cout << "char\n"
else if (typeid(T).hash_code() == typeid(int).hash_code())
std::cout << "int\n"
else if (typeid(T).hash_code() == typeid(std::string).hash_code())
std::cout << "std::string\n"
}
template<typename T>
void print()
{
std::cout << typeid(T) << '\n';
}