Как использовать тип данных шаблона внутри основной функции в C ++?

#include <iostream>

using namespace std;

template <class U>
U add (U a, U b)
{
U c = 0 ;
c = a + b;
return c;
}

int main()
{
int first = 2;
int second = 2;

U result = 0;

result = add(first, second);

cout <<  result << endl;

return 0;
}

Я хочу объявить тип данных переменной результата, используя тип данных шаблона, чтобы моя программа добавления была универсальной, но компилятор выдает мне эту ошибку «результат не был объявлен в этой области».

1

Решение

То, что вы пытаетесь сделать, невозможно. Вы можете использовать только U в вашей функции добавления.

Тем не менее, вы можете сделать это вместо

auto result = add(first, second);

Или же

decltype(auto) result = add(first, second);

В вашем случае оба будут делать то же самое. Однако они совершенно разные. Короче говоря, decltype(auto) всегда получит вам точный тип, возвращаемый add, в то время как auto может нет.

Быстрый пример:

const int& test()
{
static int c = 0;
return c;
}

// result type: int
auto result = test();

// result type: const int&
decltype(auto) result = test();

Если вы хотите узнать больше об авто, Скотт Мейерс прекрасно это объясняет:

CppCon 2014: Скотт Мейерс «Вывод типа и почему вы заботитесь»

5

Другие решения

Альтернатива превосходному предложению Хосе, которое позволит вам разделить декларацию и «инициализацию» (которая тогда будет только назначением, как в вашем вопросе), это:

decltype(add(first, second)) result = 0;
result = add(first, second);

Но, очевидно, блин.

0

По вопросам рекламы [email protected]