Je développe une application GUI via WxWidgets. Il possède 2 parties: partie de l'interface graphique et la partie "logique". Je veux avoir une partie logique totalement indépendante sur WxWidgets. Mais un composant de l'interface graphique de retour de Wxvariant et j'ai besoin de l'utiliser dans la partie logique.
Je cherche donc un moyen de "convertir" wxvariandt à boost :: variante p>
wxvariant fonctionne comme ça : p> alors je pense que quelque chose comme p> est-il possible d'utiliser boost :: variante (ou boost: : Tout) comme ça? P> p>
4 Réponses :
Vérification de la vérification Documénation et tutoriel ne sera pas aussi mal. P>
Boost.La bibliothèque ne diffère pas de Boost.Variant à cet égard (ce que vous mettez est ce que vous obtenez :)), mais boost :: variante code> (s'il vous plaît ne capitalise pas 'v') fonctionne une autre manière: vous ne pouvez récupérer que ce que vous mettez à l'intérieur. Pensez-y comme un syndicat de type sécurisé (R). P>
boost :: n'importe quel code> est sans bornes em >:: Vous pouvez stocker la valeur de tout type dans
boost :: n'importe quel code>, mais dans
boost :: variante code> Vous ne pouvez stocker que ce qui a été déclaré par les paramètres de modèle de Variant. P >
boost :: variante code> ne convient pas à vous. Il existe d'autres moyens distincts pour convertir une chaîne en entiers, tels que
strtol () code>,
sscanf () code>,
boost :: lexical_cast <> () Code> ... p>
réponse simple? Non, vous ne pouvez pas convertir via des chaînes, cela induit une perte d'informations et Je ne sais pas si boost :: variante code> ne tente pas automatiquement d'analyser les chaînes. P>
wxvariant code> offre une conversion explicite - en général, il peut être difficile de convertir en
boost :: variante code> sans tester pour des cas spéciaux. < / p>
Vous pouvez probablement utiliser puisque vous utiliserez probablement ce type dans quelques endroits, Vous voudrez probablement créer un alias pour cela. IE P> boost :: variante code> avec quelques modifications. Pour commencer, vous devez dire
boost :: variante code> quels types il stockera:
switch (x.which()) {
case 0: // it's an int
case 1: // it's a string
case 2: // it's a bool
}
Une réponse de Boost.variant sans aucune mention de static_visitor code>?
Je sais. Mais cela semblait un peu au-delà de la portée de la question.
Malheureusement, Boost :: Variante Code> L'initialisation et l'affectation perdent leurs chèques de type strict quand
. ( svn.boost.org/trac/boost/ticket/719 ) bool code> est dans le mélange
Sauf si vous avez besoin de, pourquoi pas seulement utiliser
wxany code>? Si vous avez besoin de vous en attendre, envisagez de faire une vérification sur
wxany code> avant d'attribuer de la valeur à
boost :: variante code> ...
Regardez de plus près la documentation - il n'y a pas de type appelé
Boost :: [V / V] ARIANT CODE> - Il s'agit d'une classe de modèle qui doit connaître les types à l'avance. La similitude de nom est principalement accidentelle, en fait, WXWDgets remplacera WxVariant avec WXANY à un moment donné pour éviter cela. Dans les nouvelles connexes, Boost.any est un peu plus proche, mais cela ne vous permet toujours pas d'analyser et de désautoriser des cordes, AF loin que je sache.
@phooji: merci ... C'est exactement comme si vous l'avez dit. J'étais juste confus sur le nom "Variante" ...