-
Data: 2009-08-27 13:55:07
Temat: Re: szablony metod - deklaracja i definicja
Od: Tomasz Bywalec <t...@p...dont.spam.me.o2.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Megas pisze:
[...]
>
> Ciekawe jest to, ze w sytuacji, gdy deklaracje i definicje funkcji
> szablonowej klasy A umiescilem razem w jednym pliku *.h (projektu *.dll) to
> wykorzystanie tej funkcji poza projektem *.dll nie stwarzalo zdanych
> problemów.
Domyślam się że ten plik .h include'ujesz również w projektach
korzystających z dll'ki. W takim przypadku kompilator, podczas
kompilacji programu, zna definicje szablonu i rozwija go,
niezależnie od tego czy w dll'ce znajdują się skompilowane
konkretyzacje czy też nie - kompilator na tym etapie nie jest
w stanie tego "zgadnąć".
Ale osobiście wydaje mi się teraz, że niepotrzebnie brniemy
w to rozwiązanie. Skoro chcesz aby w dll'ce znajdowało się
tylko kilka konkretyzacji szablonu dla kilku typów, jednocześnie
wyrzucając całą definicję szablonu z pliku nagłówkowego, to i tak
ograniczasz użycie szablonu do właśnie tych kilku
typów. W takim razie równie dobrze możesz, zamiast szablonu metody,
zdefiniować kilka metod (o tej samej nazwie) dla kilku różnych typów
argumentu. Jeżeli, dla zdefiniowania tych metod, wygodnie Ci jest się
posłużyć szablonem to możesz go trzymać, najwyżej
pod inną nazwą, w całości w pliku .cpp, albo zostawić prywatną
deklarację w .h, a definicję w .cpp. Dodatkowo, programista korzystający
z tej dll'ki będzie od razu wiedział dla jakich typów zdefiniowana
jest ta metoda (w każdym razie błąd nastąpi już na etapie kompilacji
a nie linkowania).
Natomiast jeżeli chciałbyś jednak aby szablon działał dla różnych
możliwych typów T to i tak definicja musi trafić do pliku nagłówkowego
(w praktyce, na większości kompilatorów C++, nie da się tego uniknąć).
Przypuszczam, że z pomocą "extern templates" (o ile są w Visual C++ ?)
dałoby się ewentualnie skompilować konkretyzacje kilku typów i
umieścić je w bibliotece .dll. Pytanie tylko czy naprawdę jest
to gra warta świeczki ?
Pozdrawiam,
Tomek Bywalec
Następne wpisy z tego wątku
Najnowsze wątki z tej grupy
- Grok zaczął nadużywać wulgaryzmów i wprost obrażać niektóre znane osoby
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
Najnowsze wątki
- 2025-07-23 Gdańsk => Programista Delphi <=
- 2025-07-23 Gdańsk => Programista Mainframe (z/OS, Assembler) <=
- 2025-07-23 Warszawa => Starszy inżynier DevOps (AWS) <=
- 2025-07-23 Gdańsk => Mainframe (z/OS, Assembler) Developer <=
- 2025-07-23 Kraków => Senior Fullstack Engineer (Low-Code Platform) <=
- 2025-07-23 Wrocław => Senior Key Account Manager IT <=
- 2025-07-23 Trójmiasto => Head of Social Media <=
- 2025-07-23 Rzeszów => Spedytor Międzynarodowy <=
- 2025-07-23 Lublin => ERP Implementation Consultant (AP Module) <=
- 2025-07-23 Środa Wielkopolska => SAP FI/CO Internal Consultant <=
- 2025-07-23 Warszawa => Inżynier oprogramowania .Net <=
- 2025-07-23 Kraków => Kotlin Developer <=
- 2025-07-23 Żerniki => Dyspozytor Międzynarodowy <=
- 2025-07-23 Warszawa => Java Developer <=
- 2025-07-23 Wrocław => Konsultant wdrożeniowy (systemy controlingowe) <=