我刚刚开始尝试使用 cap'n proto 并试图提高我的理解。
现在我正在尝试找出如何最好地使用 AnyPointer,在试验过程中我注意到我似乎不需要为我的对象调用 initAs 并且我设置的值将被正确读取。
这是我的具有任何结构对象的根容器的架构
struct TestObject
{
value1 @0 : Int32 = -5;
value2 @1 : Float32 = 9.4;
}
struct TestContainer
{
object @0: AnyPointer;
}
当我开始序列化某些对象时,使用 initAs 还是 getAs 似乎并不重要。
::capnp::MallocMessageBuilder message;
auto container= message.initRoot<TestContainer>();
auto anything = container.initObject();
auto objectBuilder = anything.getAs<TestObject>(); //I was expecting this to break since nothing obviously initialises it.
objectBuilder.setValue1( -2099 );
objectBuilder.setValue2( -3.994f );
//using initAs works as well
auto anything = container.initObject();
auto objectBuilder = anything.initAs<TestObject>();
objectBuilder.setValue1( 270001 );
objectBuilder.setValue2( -65.2f );
当我再次反序列化时,我从上述任何一种方法中都得到了正确的值。在这里使用 getAs 是正确的还是更复杂的 TestObject 会破坏事情?