在std :: remove_reference <b> :: type中使用typename

时间:2015-06-27 22:38:24

标签: c++ c++11

这是我的代码:

#include <iostream>
#include <thread>
#include <vector>

template<typename B>
void checkInt(B&& b, std::false_type){
    std::cout<<"this is not int"<<std::endl;
}   


template<typename B>
void checkInt(B&& b, std::true_type){
    std::cout<<"this is int"<<std::endl;
}   



template<typename B>
void forwarder(B&& b){
    checkInt(std::forward<B>(b), 
     std::is_integral<typename std::remove_reference<B>::type >()
    );
}       


int main() {

    forwarder(1);
    return 0;
}

它的作用是,它区分参数是否为int类型。它工作正常,但我对这个特定的行感到困惑:

std::is_integral<typename std::remove_reference<B>::type >()

我尝试研究它并发现关键字typename用于声明类型参数/避免算术混淆。在此之后,我似乎无法找到与我的问题相关的任何适当的例子。为什么有必要在typename使用std::remove_reference<B>::type并不是类型本身?恩。 INT

奖金问题:来自void checkInt(B&& b, std::true_type)std::true_type相当于真或假,或者是#34; bool&#34;本身?像std::is_integral<typename std::remove_reference<B>::type >()返回什么?

0 个答案:

没有答案