2012-11-11 3 views
0

Je suis sur Linux, et j'essaie d'écrire du code multiplateforme. Je sais que les modèles sont difficiles à utiliser correctement sur Windows, mais je ne me souviens pas des détails. Je sais qu'un problème concerne le débogage de modèles et les modèles qui croisent les limites dll, mais pas comment contourner ce problème - ou si une solution de contournement est même possible. Je crois qu'il y a d'autres problèmes, mais je n'ai trouvé que de vagues références à ces problèmes. Donc, quels sont les problèmes avec les modèles C++ sur Windows? En dehors de l'utilisation de modèles, quelles sont les solutions?Quels sont les problèmes avec les modèles sur Windows? Quelles sont les solutions?


Edit: Peut-être que les problèmes ne sont que le STL, et non avec des modèles en général?

Deux citations:

Vous ne pouvez pas exposer les appels STL à travers les frontières de la bibliothèque sur les fenêtres sans maux de tête importants.

et

Encapsulation est un must, je l'ai fait des projets avec des conteneurs stl sur les frontières dll ainsi que les bibliothèques statiques sur les fenêtres et il est impossible d'utiliser sans encapsulation.

+0

Cela dépend de la compilation, pas de l'OS ... – unsym

+0

Votre question n'est pas assez spécifique. Il n'y a pas de problème spécifique aux fenêtres avec les templates. Les DLL devraient aussi bien convenir, tant que vous ne mélangez pas les CRT, les compilateurs, et n'utilisez pas de fichiers crt liés statiquement avec des DLL. Au lieu de lire des informations douteuses provenant de sources non fiables (** qui a dit que "l'encapsulation est un must"?), Pourquoi n'essayez-vous pas simplement d'utiliser des DLL avec des templates pour voir ce qui se passe? Si vous rencontrez un problème, vous pouvez toujours poser une question * spécifique *. – SigTerm

+0

@SigTerm le gars qui a dit qu'il a de nombreuses années d'expérience en tant que développeur sur Windows.Je pourrais installer Windows sur un VM et l'essayer moi-même, mais dans le passé j'ai eu du mal à faire des builds sur windows. – Mark

Répondre

2

Je sais que les modèles sont difficiles à utiliser correctement sous Windows.

Je n'ai jamais entendu une telle chose. Cela ressemble à FUD sans fondement, que je vous suggère de complètement ignorer.

+0

J'ai mis à jour la question. Peut-être que les problèmes sont seulement avec «STL»? – Mark

+0

@Mark: Vraisemblablement, vous voulez dire la bibliothèque standard C++. –

+0

Je ne parle que d'une partie des modèles. «STL» est une étiquette imparfaite, mais les gens savent généralement ce que cela signifie. – Mark

1

est ici un problème, from the MS KB (edit: celui-ci ne se rapporte qu'à MSVC 5 et 6, je n'ai pas l'intention de soutenir un tel compilateur ancien, il est donc hors de propos pour moi):

Certains STL les classes contiennent des classes imbriquées. Ces classes ne peuvent pas être exportées. Par exemple, deque contient une classe imbriquée deque :: itérateur. Si vous exportez deque, vous recevrez un avertissement indiquant que vous devez exporter deque :: iterator. Si vous exportez deque :: iterator, vous recevez un avertissement indiquant que vous devez exporter deque. Cela est dû à une limitation conçue qu'une fois qu'une classe de modèle est instanciée, elle ne peut pas être ré-instanciée et exportée. Le seul conteneur STL actuellement exportable est vector. Les autres conteneurs (map, set, queue, list, deque) contiennent tous des classes imbriquées et ne peuvent pas être exportés.

+0

IIRC, stdlib de VC11 a adopté les itérateurs SCARY, qui libèrent les itérateurs de l'allocateur, du comparateur, du hachage du conteneur parent, etc. Ceci ne peut pas être implémenté avec des classes imbriquées, seulement avec des classes libres + un typedef. Peut-être que ce n'est plus un problème? – Xeo

+0

@Xeo Je viens de regarder à nouveau cette page, et elle ne concerne que MSVC 5 et 6. – Mark

Questions connexes