Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.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++ 从true值到std::true\u类型的隐式转换_C++_Templates_C++11_Typetraits - Fatal编程技术网

C++ 从true值到std::true\u类型的隐式转换

C++ 从true值到std::true\u类型的隐式转换,c++,templates,c++11,typetraits,C++,Templates,C++11,Typetraits,这是我为学习C++而编写的一个简单的模板程序: #include <type_traits> #include <iostream> using namespace std; template<typename T> T foo(T t, true_type) { cout << t << " is integral! "; return 2 * t; } template<typename T> T

这是我为学习C++而编写的一个简单的模板程序:

#include <type_traits>
#include <iostream>

using namespace std;

template<typename T>
T foo(T t, true_type)
{
    cout << t << " is integral! ";
    return 2 * t;
}


template<typename T>
T foo(T t, false_type)
{
    cout << t << " ain't integral! ";
    return -1 * (int)t;
}

template<typename T>
T do_foo(T t){
    return foo(t, is_integral<T>());
}

int main()
{
    cout << do_foo<int>(3) << endl;
    cout << do_foo<float>(2.5) << endl;
}
#包括
#包括
使用名称空间std;
模板
T-foo(T-T,真型)
{
cout
是一个继承自
true\u type
false\u type
的类型


is\u integral()
是一个构造函数调用,因此其中一个类型的实例是调用
foo
的参数。然后根据它是哪个重载来选择重载。

它不是调用
操作符()
,而是构造一个临时的,就像
int()
。注意:为了避免混淆,在C++11中,这可能是
is_integral{}
@MatthieuM。任何他们为什么添加新符号的指针?
()
符号看起来更像是创建一个实例,而不是
{}
这看起来像定义。@dashesy:除此之外,它还允许在不破坏向后兼容性的情况下修改初始化规则(在类型转换时)。