如果模板参数是Value或Type?
,是否可以使用traits来推断template <typename A>
void function(){
if(is_value<A>()::value)
cout<<"A is value"<<endl;
else
cout<<"A is type"<<endl;
}
int main(){
function<int>();
function<3>();
}
输出
"A is type"
"A is value"
答案 0 :(得分:1)
每14.3 / 1标准:
有三种形式的模板参数,对应于三种形式 模板参数的形式:类型,非类型和模板。
按照14.3.1 / 1标准:
模板参数的模板参数(类型)应为 type-id 。
由于您的模板参数是类型,因此您应该传递 type-id 作为模板参数。 3
不是 type-id 。所以,这是不可能的。
您只能使用非类型 template-argument:
添加一个函数template <class A>
void function()
{
std::cout << "A is type" << std::endl;
}
template <int A>
void function()
{
std::cout << "A is value" << std::endl;
}
int main()
{
function<int>();
function<3>();
}