2 votes

Comment sortir les valeurs d'un type personnalisé en utilisant NSLog ?

Contexte

J'utilise VES pour tirer parti de la visionneuse de nuages de points Kiwi sur les appareils iOS.

Erreur

vesVector3f v = self->mKiwiApp->cameraFocalPoint();
NSLog(@"%@",  v);

résulte en

Cannot pass non-POD object of type `vesVector3f` (aka 'Matrix<float, 3, 1>') to variadic function; expected type from format string was 'id'

Question

Je comprends que NSLog est censé produire un objet de type id . Comment puis-je obtenir NSLog au type de sortie vesVector3f ?

Détails supplémentaires

Voici quelques détails que j'ai trouvés sur le type personnalisé. Il apparaît Vector3f est un vecteur de 3 flottants.

  • typedef Eigen::Vector3f vesVector3f;
  • EIGEN_MAKE_TYPEDEFS_ALL_SIZES(float, f)

Solution

Par trojanfoe commentaire :

NSLog(@"%f, %f, %f", v(0, 0), v(1, 0), v(2, 0));

3voto

trojanfoe Points 61927

Cela ressemble à de l'Objective-C++ donné Eigen est une bibliothèque C++.

Vous voudrez imprimer chacune des variables membres flottantes comme ceci :

NSLog(@"%f, %f, %f", v(0, 0), v(1, 0), v(2, 0));

Je dis "quelque chose comme ça" car je n'ai jamais utilisé Eigen.

Vous pouvez uniquement utiliser %@ avec une classe Objective-C, où l'on surcharge la fonction description pour qu'il fonctionne à votre goût.

2voto

matt Points 60113

Comment faire pour que NSLog sorte le type vesVector3f ?

Il faudrait qu'il s'agisse d'un objet, comme l'indique le message d'erreur. Si c'est un struct, il ne peut pas être sorti directement via NSLog. Vous pourriez sortir les trois flottants vous-même, individuellement. Mais si vous avez l'intention de faire cela souvent, vous pouvez, par exemple, écrire une routine qui convertit les trois flottants en une chaîne de caractères et sortir cette chaîne. C'est ce que font les routines intégrées comme NSStringFromCGVector faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X