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

Konkretyzacja szablonu na żądanie

Ostatnio zmodyfikowano 2012-03-03 20:08
Autor Wiadomość
slawkow68
Temat założony przez niniejszego użytkownika
Konkretyzacja szablonu na żądanie
» 2012-03-03 16:45:28
Witam,
natknąłem się na taki aspekt, jakim jest konkretyzacja szablonu(funkcji, klasy) na żądanie (bez tworzenia żadnego obiektu, wywoływania funkcji).
Ale niestety nie chcę mi się program skompilować;/
C/C++
template < typename T >
bool mniejszy( T o1, T o2 )
{
    if( o1 < o2 )
         return true;
   
    return false;
}
///Problematyczna linijka:
template bool mniejszy < int >( int, int );
Podobnie jest z szablonami klas. Wyrzuca błąd: "Expected primary-expresion before 'template'". Kompilator to gcc 4.4.1;
Jaki jest poprawny sposób na wykonanie tego?
P-51847
DejaVu
» 2012-03-03 16:49:47
C/C++
bool mniejszy( int, int )
{
    //... :)
    return false;
}

/edit:
Inny przykład:
C/C++
#include <cmath>

struct VECTOR2
{
    double x, y;
    double Dlugosc() const { return sqrt( x * x + y * y ); }
};

template <>
VECTOR2 max( VECTOR2 vWektor1, VECTOR2 vWektor2 )
{
   
    return( vWektor1.Dlugosc() >= vWektor2.Dlugosc() ? vWektor1
        : vWektor2 );
}
Źródło: http://xion.org.pl/files/texts/mgt/html/2_4.html
P-51848
slawkow68
Temat założony przez niniejszego użytkownika
» 2012-03-03 18:03:13
Nie chodzi mi w żadnym razie o szablony specjalizowane. Chodzi mi bardziej o możliwość skompilowania szablonu dla konkretnych typów, np. żeby ten szablon skompilować dla intów, double, i np. std::stringów, żeby otrzymać już skompilowane funkcje (w postaci plików *.o), jakby stworzenie "biblioteki?".
P-51863
DejaVu
» 2012-03-03 18:15:58
C/C++
bool mniejszy( int a, int b )
{
    return mniejszy < int >( a, b );
}
P-51866
Mrovqa
» 2012-03-03 19:47:25
Kompilator tworzy sobie konkretną funkcję/klasę z szablonu tylko wtedy, gdy zajdzie potrzeba, tzn. wywołanie funkcji, pobranie jej adresu, czy definicja obiektu jakiejś tam klasy. Możesz zrobić nieużywaną funkcję, w której znajduje się kupa odwołań się do tych funkcji/klas (albo w jednej z nich dać np.
if( false ) { /*tu odwolania*/ }


Pozdrawiam,
Mrowqa
P-51875
slawkow68
Temat założony przez niniejszego użytkownika
» 2012-03-03 20:08:04
Dzięki za odpowiedzi, można w sumie w w.w. sposoby to zrobić, ale "najładniej" to chyba:

template class nazwa_szablonu_klasy<int>;
template bool nazwa_szablonu_funkcji<int>(int, int);

Mój błąd polegał na tym, że jedno polecenie umieściłem w "mainie", a w drugim zapomniałem <int> po nazwie funkcji. Wykładowca kiedyś rzucił pytanie na sale, jak przekazać komuś szablon klasy, bez podawania kodu źródłowego (ale zakładając, że ten ktoś wie dla jakich typów będzie naszą klase chciał parametryzować), no i chodziło mi to po głowie w sumie;)
P-51879
« 1 »
  Strona 1 z 1