0
我刚刚开始尝试cap'n proto,并试图提高我的理解。为什么我不需要在capnproto中使用AnyPointer :: initAs?
现在我正在努力研究如何最好地使用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打破东西?