Begrænse klasser der kan bruges i Templates

Tags:    c++

Hej,
Er det muligt at definere en template funktion sådan, at man kun kan bruge bestemte nedarvede klasser når man angiver typen.

F.eks.
Fold kodeboks ind/udKode 






8 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
Bertel jeg kan følge dig, men jeg mener nu at man selv kan bestemme hvad for biblioteker man vil have med :-) Det kræver dog at du lige tryller lidt på kommandolinjen.

Peter, jeg vil gerne høre om din problemstilling, for det du prøver på er ca. at bruge et kojern til at slå søm i med (nogen kan sikkert godt gøre det), men du prøver at bruge et stykke værktøj som er beregnet til at lave noget generelt med, til noget specifikt.



Fordi boost er en enorm kolos. Hvis du ønsker at bruge en lille ting, skal du lige tilføje 1200 headerfiler og ca. lige så mange .cpp filer til sit projekt. Boost kan sikkert mange rare ting, men de gange jeg har forsøgt at bruge det, har jeg opgivet, det er for bøvlet, og langt lettere at strikke noget sammen i hånden.

Det er ved at være nogen år siden jeg sidst kikkede på boost, måske er det blevet bedre...


Jeg er lige startet med at bruge Boost. Self. skal man inkludere de headere som der skal til, men hvis man kun bruger 3-5 libraries fra boost skal man kun inkludere 3-5 headere... Et andet er at hvis et boost library afhænger af et andet boost lib, skal man til at linke korrekt saa det hele kompilerer. Desuden er mange af boost libene implementerede i deres header dvs. at man ikke behöver at linke til et lib.



Indlæg senest redigeret d. 06.05.2010 15:25 af Bruger #14479
Hvad skal du bruge det til om man må spørge? Kan være der findes en mere smart løsning.

Lige umiddelbart mener jeg ikke at du kan specificere om en bestemt klasse må gives med til en template.




Jeg har fået bekræftet andet sted fra, at der ikke er direkte understøttelse af det jeg ønsker (hvilket jeg heller ikke regnede med), men at man kan emulere effekten bl.a. via boost::concepts.



Normalt forsøger man at lave template funktioner så de kan virke med alle typer, eller så mange som muligt, der er sjældent nogen grund til at begrænse sig.

Hvis man har behov for det, kan man lade funktionen tilgå objektet på en måde som kun de rigtige typer understøtter.

Og jeg får udslæt når nogen nævner boost...



Og jeg får udslæt når nogen nævner boost...


Hvorfor ?



Fordi boost er en enorm kolos. Hvis du ønsker at bruge en lille ting, skal du lige tilføje 1200 headerfiler og ca. lige så mange .cpp filer til sit projekt. Boost kan sikkert mange rare ting, men de gange jeg har forsøgt at bruge det, har jeg opgivet, det er for bøvlet, og langt lettere at strikke noget sammen i hånden.

Det er ved at være nogen år siden jeg sidst kikkede på boost, måske er det blevet bedre...



Nu jeg ikke den bedste til C++, men for, at opnå det han ønsker, kunne han ikke bare skrive følgende:


Fold kodeboks ind/udKode 




t