如何使用NSLog输出自定义类型的值?

时间:2016-05-18 16:42:19

标签: typedef eigen objective-c++ nslog

背景

我正在使用VES在iOS设备上利用Kiwi点云查看器。

错误

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

导致

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

问题

我知道NSLog应该输出id类型的对象。如何让NSLog输出类型vesVector3f

额外详情

以下是我发现的有关自定义类型的一些细节。看起来Vector3f是3个浮点数的向量。

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

解决方案

根据trojanfoe的评论:

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

2 个答案:

答案 0 :(得分:3)

这看起来像Objective-C ++,Eigen是一个C ++库。

您希望打印每个浮动成员变量,如下所示:

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

我说&#34;像这样的事情&#34;因为我从未使用过Eigen。

您只能将%@与Objective-C类一起使用,您可以覆盖description方法,以使其符合您的喜好。

答案 1 :(得分:2)

  

如何让NSLog输出类型vesVector3f?

它需要是一个对象,正如错误消息告诉您的那样。如果它是结构,则不能通过NSLog直接输出。您可以自己单独输出三个浮点数。但是,如果您要做很​​多事情,例如,您可以编写一个例程,将三个浮点数转换为字符串并输出该字符串。这就是像NSStringFromCGVector这样的内置例程。