加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:47:04 所属栏目:百科 来源:网络整理
导读:这是我写给研究C的简单模板编程: #include type_traits#include iostreamusing namespace std;templatetypename TT foo(T t,true_type){ cout t " is integral! "; return 2 * t;}templatetypename TT foo(T t,false_type){ cout t " ain't integral! "; re
这是我写给研究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()的定义

解决方法

is_integral< T>是从true_type或false_type继承的类型.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读