Шаблон C ++, указывающий тип в параметре - PullRequest
0 голосов
/ 15 февраля 2019

В шаблоне C ++, когда вы указываете тип в параметре (пример ниже), означает ли это, что тип должен быть int или это подсказка?

template<typename T=int>
    class Square_
    {
    } 

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Это по умолчанию , так же, как и для аргументов функции.Таким образом, вы можете использовать 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 могут отличаться в вашей системе)

0 голосов
/ 17 февраля 2019

Это означает, что если вы используете пустой <>, это эквивалентно использованию. См. Пример ниже.

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

Я не int

0 голосов
/ 15 февраля 2019

Вы указываете тип по умолчанию .Это означает, что вы можете опустить тип при создании экземпляра шаблона, и в этом случае будет выбран этот тип по умолчанию.Но когда вы вручную указываете тип, он имеет приоритет.Пример:

Square_<double> sq1; // explicitly given
Square_<> sq2; // uses default: int
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...