2

如果模板参数是值还是类型,是否可以使用特征来推断?

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"
4

1 回答 1

1

根据 14.3/1 标准:

模板参数有三种形式,对应模板参数的三种形式:类型非类型模板

根据 14.3.1/1 标准:

作为类型的模板参数的模板参数应为type -id

由于您的模板参数是type,您应该将type-id作为模板参数传递。3不是type-id。所以,以你的方式是不可能的。

您只能添加具有非类型模板参数的函数:

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>();
}
于 2013-06-29T11:31:01.307 回答