7
votes

Types de base à exposer sur une API C ++

Je cible des fenêtres mais je ne vois aucune raison pour que le code de l'API que j'écris ne peut pas utiliser des types de base C ++. Ce que je veux faire, c'est exposer des méthodes qui renvoient des chaînes et des INT. Dans le monde C #, j'utiliserais simplement une chaîne et avoir une chaîne unicode, mais dans VC ++ j'ai la possibilité d'utiliser STD :: String, STD :: WSTRING ou MFC / ATL CStrings.

Devrais-je simplement utiliser STD :: wstring exclusivement pour supporter UNICODE ou puis-je utiliser STD :: String qui serait compilé à Unicode en fonction de mes paramètres de construction? Je suis penché vers ce dernier. Je préférerais fournir des méthodes de [item] ascendant () sur mes objets pour d'autres types de chaîne.

devrais également utiliser Taille_T au lieu d'entier?

L'API va être utilisée par moi et peut-être un futur développeur travaillant sur l'interface graphique C ++. C'est un moyen de séparer les préoccupations. Mes préférences:

  • Intuitive pour d'autres développeurs.
  • Compatibilité directe avec VC ++
  • Compatibilité avec d'autres compilateurs C ++
  • Performance (c'est une préoccupation moindre pour moi, mais besoin du temps de démarrage du reste de mon application)

    Tous les guides seraient appréciés.


1 commentaires

Ce style de configuration du projet dépend vraiment du but du projet, etc. Tout a sa place, c'est pourquoi certains aspects ne sont pas simplement obsolètes. std :: string est une utilisation la plus courante que j'ai vue (bien que j'ai vu wchar_t , etc. pour Unicode) et si vous mesurez la taille de quelque chose, utilisez < Code> taille_t .


3 Réponses :


1
votes

Dans votre situation, cela me prendrait quelques heures / jours pour développer une opinion et décider. Tout d'abord, je préfère beaucoup C_API à C ++ _ API, même pour le code C ++. Ensuite, la réponse serait Char *, ou WCHAR *, ou TCHAR *. Essayez maintenant de deviner si vous attendez vraiment du besoin d'unicode. Une grande majorité de mes projets (y compris ceux avec GIO), n'avaient pas besoin d'unicode, la simplicité et la familiarité des tableaux CLAIR sont souvent difficiles à battre.

En bref, essayez de prédire quels seront vos besoins, n'essayez pas de regarder trop loin dans l'avenir (2 ans est une bonne marque), puis proposez la solution la plus simple pour répondre aux besoins.

Dernier: Pour répondre à votre question Plus directement, je commencerais avec STD :: String comme mon 1ère choix à évaluer. À moins que je trouve un avantage d'offre en faveur des autres choix, je resterais avec elle.


0 commentaires

1
votes

Utiliser std :: wstring / chaîne au lieu de la MFC CString vous permettra de porter votre code dans d'autres cadres (par exemple, QT pour Windows).

Même lorsque vous utilisez STD :: String, vous pouvez encoder les chaînes de l'UTF-8, votre API sera donc en mesure de renvoyer des chaînes UNICODE. N'oubliez pas que même Wstring est vraiment utf-16 et non les 32 bits entièrement unicode (tandis que sur certains systèmes d'exploitation wstring sont UTF-32).


0 commentaires

2
votes

Vous devez probablement rester au type STL String. La classe CSstring MFC est construite sur celle de nos jours de toute façon.

Comme il a été noté auparavant, l'utilisation de Wstring n'est pas une balle magique pour traiter les problèmes Unicode, car de nombreux caractères Unicode nécessitant encore plusieurs wchars à encoder.

Utiliser UTF-8 a plutôt des avantages potentiels (vous n'avez pas à vous soucier de l'endansement par exemple).

Sous Windows, tous les noyaux modernes sont basés sur WRCHAR. Il existe donc une surcharge de performance (minimale) impliquée si vous utilisez les versions de 8 bits de caractères d'API.


0 commentaires