Ograniczenie wartości parametrów w szablonie

0

Hejo,
mam problem z szablonem klasy w c++, chciałbym ograniczyć wartości jakie może przyjmować jego parametr. Dla przykładu:

//mam taka klase szablonowa, i chcialbym zeby parametr mogl byc z zakresu 1-100
template <int parametr>
class moja_klasa 
{
   //jakies bzdety w klasie
};

int main ()
{
   moja_klasa<5> mk1; //ok, parametr jest w zakresie 1-100
   moja_klasa<0> mk2; //zle, parametr jest poza zakresem
}

Jak zrobić żeby w drugim przypadku kompilator nie pozwalal na wygenerowanie błędnego szablonu, albo na stworzenie błędnego obiektu?

0

https://ideone.com/hdx1TN
https://ideone.com/C45WXH

#include <type_traits>
 
template <int value, typename Enable = void>
class Test;
 
template <int value>
class Test<value, typename std::enable_if<(value >= 1 && value <= 100)>::type>
{
 
};

std::enable_if działa dzięki zasadzie SFINAE (http://en.wikipedia.org/wiki/Substitution_failure_is_not_an_error). Jeżeli nie możesz skorzystać z C++11 to boost ma właściwie identyczną klasę. Ewentualnie możesz ją dodać sobie sam, jest króciutka.

0

Wielkie dzięki, dokładnie o coś takieko mi chodziło.

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