C ++模板在参数中指定类型

时间:2019-02-15 10:51:11

标签: c++ templates

在C ++模板中,当您在参数中指定类型时(下面的示例),这是否意味着该类型必须是int或提示?

template<typename T=int>
    class Square_
    {
    } 

3 个答案:

答案 0 :(得分:3)

您指定默认类型。这意味着您可以在实例化模板时忽略类型,在这种情况下,将选择此默认类型。但是,当您手动指定一种类型时,该类型具有优先权。示例:

Square_<double> sq1; // explicitly given
Square_<> sq2; // uses default: int

答案 1 :(得分:1)

这是默认,与函数参数相同。因此,当您不想为默认类型选择其他类型时,可以使用Square_<>来表示Square_<int>

例如:

#include <iostream>
#include <typeinfo>

void function(int i = 42)
{
    std::cout << "function(" << i << ")\n";
}

template <typename T = int>
void function_template()
{
    std::cout << "function_template<" << typeid(T).name() << ">\n";
}

int main() {
    function();
    function(56);
    function_template<>();
    function_template<double>();
}

将输出提供给我

function(42)
function(56)
function_template<i>
function_template<d>

(int和double类型的打印名称在您的系统上可能不同)

答案 2 :(得分:0)

这意味着如果您使用空的<>,则等同使用 请参见下面的示例。

template<typename T=int>
class Square_
{
    public:
    Square_()
    {
        if (std::is_same<T, int>::value)
        {
            std::cout<<"I am an int"<<std::endl;
        }
        else
        {
            std::cout<<"I am not an int"<<std::endl;
        }
    }
};

int main() {
    Square_<> s1;
    Square_<int> s2;
    Square_<double> s2; 
    // your code goes here
    return 0;
}

输出:

  

我是int

     

我是int

     

我不是整数