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

[C++] Bardziej zaawansowana specjalizacja wzorców klas

Ostatnio zmodyfikowano 2016-05-08 11:47
Autor Wiadomość
TheReclif
Temat założony przez niniejszego użytkownika
[C++] Bardziej zaawansowana specjalizacja wzorców klas
» 2016-05-08 00:44:55
Witam!
Mam pytanie: czy mogę stworzyć template-a klasy, który dla danego typu/klasy T stworzy jedną zmienną typu T, a potem poprzez specjalizację wzorca dla konkretnego typu (void) spowodować, aby nie była tworzona ta zmienna typu T? np.:
C/C++
template < class T = void >
class Example
{
private:
    T args;
   
    //Jakieś prywatne dane i metody
public:
    void foo( void );
    T getArgs( void ); //Zwraca args
   
    //Jakieś publiczne dane i metody
};

template <>
class Example < void >
{
private:
   
    //Jakieś prywatne dane i metody, bez składowej args
public:
    void foo( void ); //Czy ta metoda może mieć ciało zupełnie inne, niż to domyślne w domyślnej specjalizacji?
    //T getArgs(void);
    //getArgs w tej specjalizacji ma nie istnieć, jak mogę to osiągnąć (jeżeli w ogóle jest to możliwe)?
    //Jakieś publiczne dane i metody
};

Chodzi mniej więcej o taki efekt:
jeżeli klasa jako T przyjmuje cokolwiek innego niż void, to niech będzie tam składowa args o typie T, podanym przez użytkownika wzorca;
jeżeli klasa jako T przyjmuje void, to niech tej składowej tam nie będzie, a niektóre metody usunięte lub zmodyfikowane;

Czy spotkał się ktoś kiedyś z podobnym problemem/dylematem? Proszę o odpowiedź i z góry za nią dziękuję.
P-148029
pekfos
» 2016-05-08 02:36:35
A co jest nie tak z metodą z przykładu?
P-148032
TheReclif
Temat założony przez niniejszego użytkownika
» 2016-05-08 11:47:12
Pomyliłem się, z nią jest wszystko dobrze, tylko w kodzie, w którym miałem to zastosować zrobiłem to nie po kolei i myślałem, że to wina złej metody. Sory za problem, temat zamykam.
P-148034
« 1 »
  Strona 1 z 1