1

Given this schema

struct TestObject
{
    value1 @0 : Int32 = -5;
    value2 @1 : Float32 = 9.4;
}

struct TestContainer
{
    object @0: TestObject;
}

Is it possible to get an AnyPointer::Builder from the TestObject::Builder in c++ code?

This is what I am trying to do:

::capnp::MallocMessageBuilder message;
auto container = message.initRoot<TestContainer>();

TestObject::Builder objBuilder = container.initObject();

//Get an AnyPointer
capnp::AnyPointer::Builder anyBuilder = capnp::toAny( objBuilder )(); //No this does not work.

MyTestObject test( 41, 643.7f );
test.serialise( anyBuilder );

What I am trying to do is have an abstract interface with a single argument type eg.

class ISerialisable
{
    virtual void serialise(capnp::AnyPointer::Builder& any) = 0;
}

class MyTestObject: public ISerialisable
{
   void serialise(capnp::AnyPointer::Builder& any) override
   {
        auto testObjBuilder = any.getAs<TestObject>(); or should initAs be used?
        testObject.setValue1( whatever1);
        testObject.setValue2( whatever2);
   }
}

Is it possible to go down this route?

David Woo
  • 749
  • 4
  • 13

0 Answers0