是否可以使用特征检测模板中的值或类型?

时间:2013-06-29 08:57:06

标签: templates c++11 typetraits

如果模板参数是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"

1 个答案:

答案 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>();
}