ograniczenie typów w szablonach

0

mam taki początek szablonu funkcji:

template<typedef t> 

czy można jakoś określić, jakie typy może podać użytkownik? np tylko int i double?

1

Można, służy do tego bardzo prosty mechanizm specjalizacji szablonów. Ale zazwyczaj jeśli musisz tak bardzo mocno ograniczać typy to szablony są zbędne i lepiej użyć zwykłego przeciążania funkcji.

2

Gdyby chodziło o całą rodzinę typów to:

Wersja foo1 tylko dla liczb zmienno-przecinkowych, pobierająca i zwracająca typ T:

template<class T>
typename std::enable_if<std::is_floating_point<T>::value, T>::type 
    foo1(T t) 
{
    std::cout << "foo1: float\n";
    return t;
}

Źródło: http://en.cppreference.com/w/cpp/types/enable_if

1

To zależy ile i jakie te typy masz. Jeśli jest to kilka, to specjalizacjami. Jeśli pochodzą od jakiegoś typu generycznego (POD'a), to można narzędziami z <type_traits>. Jak masz robić "prawie wszystko tylko kilka nie", to wtedy rzucanie statycznych asercji na określonych typach lub usuwanie specjalizacji (C++11).

0

Poza tym o czym napisali poprzednicy można jeszcze wystawić publiczne api z konkretnymi typami (int, double) poprzez przeładowanie metody, a templatową implementację schować w private. Moim zdaniem to najprostsze rozwiązanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1