[ https://issues.apache.org/jira/browse/THRIFT-750?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Tim Wilson-Brown updated THRIFT-750: ------------------------------------ Description: The C++ Compiler currelty emits most functions in the *Client class as non-virtual. This makes it difficult to subclass the generated *Client class and override its functions. In particular, if a subclass overrides the *_send and *_recv functions, it must also override the function itself. Otherwise, the *Client version of the function calls the *Client versions of *_send and *_recv. A workaround is to inherit from the interface class *If, which has virtual functions, and use them to call *Client class member functions. But this can be cumbersome in some situations, and still requires additional functions to be overridden. I propose to add a virtual option to the C++ compiler that emits function declarations as virtual. I have attached a patched version of t_cpp_generator.cc from Thrift 0.2.0 - I can work out how to turn it into a patch file if needed. Is this worth merging into the trunk? was: The C++ Compiler currelty emits most functions in the *Client class as non-virtual. This makes it impossible to subclass the generated class and override its functions. A workaround is to inherit from the interface class *If, override the functions, and use them to call a *Client class member pointer. But this can be cumbersome in some situations. I propose to add a virtual option to the C++ compiler that emits function declarations as virtual. I have attached a patched version of t_cpp_generator.cc from Thrift 0.2.0 - I can work out how to turn it into a patch file if needed. Is this worth merging into the trunk? Yes, the *If functions are fine. It's the member functions in the *Client class that aren't virtual, meaning that if the *_send or *_recv functions are overridden in a subclass, the original function needs to be overridden in the subclass to call the new versions. I've tried to clarify the description. > C++ Compiler Virtual Function Option > ------------------------------------ > > Key: THRIFT-750 > URL: https://issues.apache.org/jira/browse/THRIFT-750 > Project: Thrift > Issue Type: New Feature > Components: Compiler (C++) > Affects Versions: 0.2, 0.3 > Environment: Cygwin 1.7.1 on Windows XP SP3, Thrift 0.2.0 & r760184 & > Trunk > Reporter: Tim Wilson-Brown > Priority: Minor > Attachments: t_cpp_generator.cc > > Original Estimate: 24h > Remaining Estimate: 24h > > The C++ Compiler currelty emits most functions in the *Client class as > non-virtual. > This makes it difficult to subclass the generated *Client class and override > its functions. > In particular, if a subclass overrides the *_send and *_recv functions, it > must also override the function itself. > Otherwise, the *Client version of the function calls the *Client versions of > *_send and *_recv. > A workaround is to inherit from the interface class *If, which has virtual > functions, > and use them to call *Client class member functions. > But this can be cumbersome in some situations, and still requires additional > functions to be overridden. > I propose to add a virtual option to the C++ compiler that emits function > declarations as virtual. > I have attached a patched version of t_cpp_generator.cc from Thrift 0.2.0 - I > can work out how to turn it into a patch file if needed. > Is this worth merging into the trunk? -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.