[ https://issues.apache.org/jira/browse/THRIFT-1712?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Martin Vogt updated THRIFT-1712: -------------------------------- Attachment: 010_base_struct_gen_140629v1.patch When using the last patch, I found out that I need the classname of the baseclass, only having the derived string is not enough. > Add TBase class for c++ > ----------------------- > > Key: THRIFT-1712 > URL: https://issues.apache.org/jira/browse/THRIFT-1712 > Project: Thrift > Issue Type: New Feature > Components: C++ - Compiler > Affects Versions: 0.8 > Reporter: Martin Vogt > Assignee: Ben Craig > Priority: Minor > Labels: base, c++, class > Attachments: 000_line_first_140628v1.patch, > 010_base_struct_gen_140629v1.patch > > > The generated c++ classes for struct's do not have a common base class. > The patch adds two options to the compiler: > - line_first : first line before all includes > - base_struct : custom base class for structs > For example: > {code:title=MyService.thrift} > struct MyStruct { > 1:i32 val; > } > service MyService { > void doSomething(); > } > {code} > thrift --gen cpp:line_first='#include <path/TBase.h>',base_struct=':public > TBase' ./MyService.thrift > {code:title=MyService_types.h} > #ifndef MyService_TYPES_H > #define MyService_TYPES_H > #include <path/TBase.h> > #include <thrift/Thrift.h> > [....] > class MyStruct:public TBase { > [...] > {code} > The default, without any option: > thrift --gen cpp ./MyService.thrift > {code:title=MyService_types.h} > #ifndef MyService_TYPES_H > #define MyService_TYPES_H > /* first line (modifier:off) */ > #include <thrift/Thrift.h> > [....] > class MyStruct /* base_struct (modifier:off) */ { > [... > {code} > The idea is to have a base class for typecasting, which can be done with: > {code} > void processSignal(const TBase& tBase) { > if (typeid(tBase).name() == typeid(MyStruct).name()) > printf("MyStruct found!\n") > > {code} -- This message was sent by Atlassian JIRA (v6.2#6252)