如何使用 NSLog 输出自定义类型的值?
How to output values of a custom type using 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));
这看起来像 Objective-C++,因为 Eigen 是一个 C++ 库。
您需要像这样打印每个 float 成员变量:
NSLog(@"%f, %f, %f", v(0, 0), v(1, 0), v(2, 0));
我说 "something like this" 因为我从未使用过 Eigen。
您只能将 %@
与 Objective-C class 一起使用,您可以在其中重写 description
方法以使其按您的喜好工作。
How do I get NSLog to output type vesVector3f ?
它需要是一个对象,正如错误消息告诉您的那样。如果是struct,则不能通过NSLog直接输出。您可以自己单独输出三个浮点数。但是,如果您要经常这样做,例如,您可以编写一个例程,将三个浮点数转换为一个字符串并输出该字符串。这就是像 NSStringFromCGVector 这样的内置例程所做的。
背景
我正在使用 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));
这看起来像 Objective-C++,因为 Eigen 是一个 C++ 库。
您需要像这样打印每个 float 成员变量:
NSLog(@"%f, %f, %f", v(0, 0), v(1, 0), v(2, 0));
我说 "something like this" 因为我从未使用过 Eigen。
您只能将 %@
与 Objective-C class 一起使用,您可以在其中重写 description
方法以使其按您的喜好工作。
How do I get NSLog to output type vesVector3f ?
它需要是一个对象,正如错误消息告诉您的那样。如果是struct,则不能通过NSLog直接输出。您可以自己单独输出三个浮点数。但是,如果您要经常这样做,例如,您可以编写一个例程,将三个浮点数转换为一个字符串并输出该字符串。这就是像 NSStringFromCGVector 这样的内置例程所做的。