Bonjour,
Lors de la création d'une bibliothèque (.lib, .dll, .a ou .so) comportant des classes faisant une grosse utilisation des templates, y a t'il une possibilité de cacher le code qui se trouve dans le .h ?
Merci.
Version imprimable
Bonjour,
Lors de la création d'une bibliothèque (.lib, .dll, .a ou .so) comportant des classes faisant une grosse utilisation des templates, y a t'il une possibilité de cacher le code qui se trouve dans le .h ?
Merci.
Lorsque tu fais une librairie (.dll, .so, .a, .lib), c'est du binaire mais il faut bien livrer le fichier d'interface .h et là, c'est du texte clair et tu ne peux pas le cacher ou alors, les autres ne peuvent pas l'utiliser ta librairie.
Question : ton .h, il a tant de valeur que cela que tu ne veuilles pas le montrer ou bien tu as hontes parce qu'il est très/trop mal écrit ?
Tu peut normalement faire des choses.
1- suivant le compilo tu peut exporter
http://www.parashift.com/c++-faq-lit...html#faq-35.14
il me semble que visual peut le faire
2- tu peut expliciter la compilation de template pour certain type dans le .cpp. Par contre ta template ne marchera que pour les type que tu aura choisi.
maTemplate.h
maTemplate.cppCode:
1
2
3
4
5
6
7
8
9 #ifndef maTemplate #define maTemplate template<typename T> struct AA { void ecrire(const T &); }; #endif;
main.cppCode:
1
2
3
4
5
6
7
8
9
10
11
12
13 #include "maTemplate.h" #include <iostream> template<typename T> void AA<T>::ecrire(const T &t) { std::cout<<t<<std::endl; }; //explicte la compilation de la template pour int et char template AA<int>; template AA<char>;
Si tu ajouteCode:
1
2
3
4
5
6
7
8
9
10
11 #include "maTemplate.h" int main(int argc, char* argv[]) { AA<int> a; a.ecrire(10); AA<char> b; b.ecrire(10); return 0; }
tu aura une erreur de linkCode:
1
2
3 AA<double> c; c.ecrire(10);
Aprés je ne sais plus si ça dépend du compilo aussi.
Ça marche sous visual.
Salut Mongaulois,
Merci pour la solution n°2, c'est exactement ce que je recherchais.
Effectivement, çà fonctionne nickel !!
Pour répondre à ram-0000 :
Ce n'est pas du tout une question de code bien écrit ou mal écrit (je pense d'ailleurs qu'il est très prétentieux d'oser affirmer que son code est bien écrit !! d'autant plus qu'ici je ne suis pas l'auteur), c'est juste qu'on doit livrer une bilbiothèque et que 90% de l'implémentation se trouvent dans les headers. On souhaite garder la propriété.Citation:
Question : ton .h, il a tant de valeur que cela que tu ne veuilles pas le montrer ou bien tu as hontes parce qu'il est très/trop mal écrit ?
Un copyright dans le header, un CD avec les fichiers envoyés par la poste (ne pas ouvrir l'enveloppe quand elle revient) et tu (ou ta boite) peux montrer de manière très basique que tu (ou ta boite) en es bien l'auteur.
Au moins en cas de copie flagrante, tu (ou ta boite) pouvez agir.
Par contre, cela ne couvre pas les cas de copie non flagrante
Je rapelle que l'APP se charge de la protection du source... L'envoi par la poste d'une lettre cachetée avec le source dedans n'est plus une preuve légale de propriété. Si je me souviens bien, déposer du source coute dans les 250€ la premiere fois, et 100€ pour les mises à jour.
Mais le source n'est pas "protégeable" en lui-même, et dès que + de 30% de celui-ci a été modifié, alors, on considère que ce n'est pas le même source.