Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Dwa sposoby specjalizacji szablonów (czy są sobie równoważne)

Ostatnio zmodyfikowano 2015-02-17 12:46
Autor Wiadomość
maly
Temat założony przez niniejszego użytkownika
[C++] Dwa sposoby specjalizacji szablonów (czy są sobie równoważne)
» 2015-02-16 20:41:17
Jak w tytule, a jeśli nie są to w jakich przypadkach ich użycia wystąpią róznice?

C/C++
template < unsigned int N >
class Utf;

template <>
class Utf < 8 >
{
};

typedef Utf < 8 > Utf8;

C/C++
template < unsigned int N >
class Utf { };

class Utf8
    : public Utf < 8 >
{
};
P-126682
DejaVu
» 2015-02-16 23:31:26
Moim skromnym zdaniem dziedziczenie nie jest operacją równoważną do klasy zawierającej analogiczną funkcjonalność. W każdym razie ja się w specjalizowanie szablonów nigdy nie bawiłem, więc Ci nie jestem w stanie udzielić odpowiedzi, która mogła by zostać uznana za w pełni wiarygodną. Powiem Ci jednak, że na Twoim miejscu unikałbym pisania kodu w oparciu o szablony, ponieważ one wpływają negatywnie na szybkość kompilacji projektu, gorzej się czyta logi w przypadku ewentualnych błędów, częściej intellisense wysiada na szablonach oraz trudniej się je utrzymuje i rozwija. Szablony mają sens tylko dla bardzo prostych komponentów, a kodowania znaków raczej bym do takiego nie zaliczał... (choć to moja subiektywna ocena).
P-126690
maly
Temat założony przez niniejszego użytkownika
» 2015-02-17 07:11:13
No cóż, pierwsza wersja pochodzi z SFML i jest doskonałym sposobem na uniemożliwienie powołania do życia niepożądanych tworów typu Utf<666> jednak kompilator którego chcę użyć nie łyka takiego zapisu więc doszedłem do wniosku że sposób drugi jest kompatybilny z pierwszym (pomijając możliwość stworzenia szatana;) ), ale mając świadomość swojej nie dużej wiedzy na temat C++ wolę się na wszelki wypadek doinformować.
P-126696
Monika90
» 2015-02-17 11:50:37
Nie rozumiem dlaczego to jest szablon z parametrem całkwotoliczbowym, jeżeli wartość tego parametru może być równa tylko 8, 16 lub 32? Dlaczego to po prostu nie są 3 klasy: Utf8, Utf16 i Utf32?

W przypadku szablonu uniemożliwienie powołania do życia niepożądanych tworów można też osiągnąć za pomocą static_assert

P-126703
maly
Temat założony przez niniejszego użytkownika
» 2015-02-17 12:46:41
W przypadku szablonu uniemożliwienie powołania do życia niepożądanych tworów można też osiągnąć za pomocą static_assert
Dostępny dopiero w C++11 którego SFML nie używa.

Dlaczego to po prostu nie są 3 klasy: Utf8, Utf16 i Utf32?
Tak to sobie właśnie przerobiłem i działa bez zarzutu.
P-126709
« 1 »
  Strona 1 z 1