从true值到std :: true_type的隐式转换

时间:2013-08-22 10:13:56

标签: 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 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;
}

它没有任何想象力,但它确实可以编译和工作。

我想知道部分is_integral<T>()是如何工作的?

我正在阅读此内容:http://en.cppreference.com/w/cpp/types/is_integral我无法找到有关此行为的具体说明 - 没有operator()的定义

1 个答案:

答案 0 :(得分:7)

is_integral<T>是一种继承自true_typefalse_type的类型。

is_integral<T>()是构造函数调用,因此其中一个类型的实例是对foo的调用的参数。然后根据它的一个选择过载。