Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何比较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 - Fatal编程技术网

如何比较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::cout
std::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';
}