/ / Тип на връщане на претоварване на претоварване - c ++

Функцията за връщане на типове с препълнени функции - c ++

Следното не изглежда като частичноспециализация (която обаче не може да се случи на функция с шаблони). Плюс функции Дон "т претоварване от просто връщане тип. Какво се случва в следния код ??

#include <iostream>
#include <string>
#include <vector>

template<typename T>
T foo() {
std::cout << "first";
return T();
}


template<typename T, typename U>
std::pair<T,U> foo() {
std::cout << "second";
return std::make_pair<T,U>(T(),U());
}

int main()
{
foo<int>();
foo<int,char>();
}

Отговори:

2 за отговор № 1

Имате две претоварвания foo (наистина две имена на функционални шаблони foo). Един взема един аргумент за тип шаблон:

template<typename T>
T foo();

И един взема два аргумента тип шаблон:

template<typename T, typename U>
std::pair<T,U> foo();

Имате право да претоварвате с различни аргументи на шаблони. Можете дори да добавите претоварвания, които приемат аргументи, които не са тип:

template <int I>
void foo() {
std::cout << "third";
}

Това е и отделно, валидно претоварване. Това, което можете да направите, е да добавите отделно:

template <typename U>
U* foo();

Защото сега имате две различни имена на функционални шаблони foo които приемат един аргумент на шаблон и няма начин за компилатора да знае кой от тях сте имали предвид - така че сега имате гарантирано неопределено претоварване.


0 за отговор № 2

Няма да го наричам претоварване, но компилаторът ще генерира две различни функции въз основа на аргументите на шаблоните.