这是我的代码:
#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 >()
返回什么?