przeladowanie operatora + GCC, problem

0

http://phpfi.com/254471

Wie ktos o co moze chodzic?

0

y. na oko musisz:

przeładować operator+(string, twojaklasa), ale też operator+(twojaklasa, string)... a wszelkie literały zamienić na string("literał"), wtedy masz obiekt tymczasowy typu, o który Ci chodzi - czyli string. Oczywiście obiekty tymczasowe są obiektami stałymi. Tyle na oko ;-P

0

A nie tak przypadkiem?

template<typename T> 
    string operator+ (string& s, const T& i) 
{
   return s+toString(i);
}
0

Dodajac do wskaznika jakiegos inta zawsze bede mial wskaznik :) o to chyba chodzi :)

0

Ok,a teraz mam problem z linkowaniem :]

http://phpfi.com/254506

0

OK, mam :)

definicja nie moze byc oddzielona od deklaracji. trzeba po prostu definicje umiescic w pliku .h bez deklarowania nigdzie czegokolwiek :)

0
    • dokladnie tak. wskaznik+int = przesuniety wskaznik. "abc" + 1 == &("abc"[1]) == "bc"
  1. ano, definicja template'a moze byc oddzielona od kodu. tylko wtedy jesli sie czegos dodatkowo nie zrobi, to kompilator wygeneruje N potrzebnych specjalizacji sygnatur funkcji/klas, a nie bedzie zadnych specjalizacji kodu.. zazwyczaj to sie robi wlasnie tak jak zrobiles - calego template daje sie w .h i mamy N definicji i ... N*liczba plikow .cpp specjalizacji kodu. czyli kazdy plik .cpp ktory robi #include "tentemplate" sobie sam generuje specjalizacje i zawiera calosc kodu template'a. jakie sa minusy no to dosc oczywiste. poprzedni przypadek mozna zas naprawic w ten sposob, ze piszesz normalnie sygnature w .h, implemetacje w .cpp, natomiast w .cpp dodajesz jeszcze explicit specialization. np:

.hpp:

template<typename T> T F(T const& arg);

.cpp:

template<typename T> T F(T const& arg)
{   // jakas impletancja..
}

//explicit specialization
template<> int F<int>(int const & );
template<> float F<float>(float const & );
template<> double F<double>(double const & );
//... i tak dla kazdego T jakie sie pojawia w reszcie kodu

to jest rozwiazanie 'najlepsze', bo wtedy kod wynikowy tego template siedzi tylko w tym jednym .cpp. ale jakei upierdliiiweee.. dlatego stosuje sie rozwiazanie "wszystko-w-.hpp"

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