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

Szablony metod

Ostatnio zmodyfikowano 2014-06-16 18:44
Autor Wiadomość
Nowicjusz
Temat założony przez niniejszego użytkownika
Szablony metod
» 2014-06-14 22:48:02
Cześć, co zrobić abym mógł oszablonować tylko metodę klasy a nie klasę, konkretnie chodzi mi o to aby metoda przyjmowała albo vektor<int> albo vektor<char>(nie potrzeba wyjatkow).


C/C++
#Klasa_cpp

class Klasa
{
public:
   
    void funkcja( vector < T > v );
   
};


#Klasa_H

void Klasa::funkcja( vektor < T > v )
{
    /....
}


Jak powyzsza metode poprawnie oszablonowac ?

EDIT:
Podobno trzeba zrobic to w ten sposob:

C/C++
#Klasa_cpp

template < class T >
class Klasa
{
public:
   
    void funkcja( vector < T > v );
   
};

#inclued "Klasa.cpp"

#Klasa_H

template < class T >
void Klasa < T >::funkcja( vektor < T > v )
{
    /....
}

Niestety wyskakuje mi blad, ktory podobno mozna rozwiazac dodajac #include "Klass.cpp" w miejsce w/w, ale to z koleji powoduje inny blad:


Error 1 error C2995: 'void Klasa<T>::funkcja(void)' : function template has already been defined c:\users\marian\documents\visual studio 2013\projects\test\test\klasa.cpp 8 1 test
P-112090
Monika90
» 2014-06-15 07:53:31
W pliku nagłówkowym
C/C++
class Klasa
{
public:
   
    template < class T >
    void funkcja( const std::vector < T >& v )
    {
        //definicja funkcji wewnątrz definicji klasy
    }
   
};

albo (też pliku nagłówkowym)
C/C++
class Klasa
{
public:
   
    template < class T >
    void funkcja( const std::vector < T >& v );
};

template < class T >
void Klasa::funkcja( const std::vector < T >& v )
{
    //definicja funkcji poza klasą
}
P-112096
Nowicjusz
Temat założony przez niniejszego użytkownika
» 2014-06-15 12:08:39
A w osobnych plikach nie da rady? Deklaracja w .cpp, definicja w .h ?
P-112101
Monika90
» 2014-06-15 12:20:41
W tym konkretnym przypadku, gdy ograniczasz się do int i char to się da, nagłówek:
C/C++
class Klasa
{
public:
    template < class T >
    void funkcja( const std::vector < T >& v );
};

plik cpp:
C/C++
template < class T >
void Klasa::funkcja( const std::vector < T >& v )
{
}

template void Klasa::funkcja( const std::vector < char >& );
template void Klasa::funkcja( const std::vector < int >& );
P-112103
DejaVu
» 2014-06-15 21:16:28
Szablony są niekompilowalne, więc deklaracja i definicja musi być w pliku nagłówkowym (co nie oznacza, że w tym samym pliku).
P-112137
Nowicjusz
Temat założony przez niniejszego użytkownika
» 2014-06-16 18:44:08
Dzieki
P-112163
« 1 »
  Strona 1 z 1