[ 
https://issues.apache.org/jira/browse/THRIFT-2067?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14904600#comment-14904600
 ] 

James E. King, III commented on THRIFT-2067:
--------------------------------------------

This change will break anyone's current streaming implementations which we use 
heavily on one project.
In addition, this implementation creates friend ostream operators not only on 
structures defined in thrift files but also on internal structures, for example:
{noformat}
root@dvm5:/usr/local/src/thrift-build# find . -type f -exec grep -H 
'operator<<' {} \;
Binary file 
./compiler/cpp/CMakeFiles/thrift-compiler.dir/src/generate/t_cpp_generator.cc.o 
matches
./tutorial/cpp/gen-cpp/Calculator.h:  friend std::ostream& 
operator<<(std::ostream& out, const Calculator_ping_args& obj);
./tutorial/cpp/gen-cpp/Calculator.h:  friend std::ostream& 
operator<<(std::ostream& out, const Calculator_ping_pargs& obj);
./tutorial/cpp/gen-cpp/Calculator.h:  friend std::ostream& 
operator<<(std::ostream& out, const Calculator_ping_result& obj);
./tutorial/cpp/gen-cpp/Calculator.h:  friend std::ostream& 
operator<<(std::ostream& out, const Calculator_ping_presult& obj);
./tutorial/cpp/gen-cpp/Calculator.h:  friend std::ostream& 
operator<<(std::ostream& out, const Calculator_add_args& obj);
./tutorial/cpp/gen-cpp/Calculator.h:  friend std::ostream& 
operator<<(std::ostream& out, const Calculator_add_pargs& obj);
./tutorial/cpp/gen-cpp/Calculator.h:  friend std::ostream& 
operator<<(std::ostream& out, const Calculator_add_result& obj);
./tutorial/cpp/gen-cpp/Calculator.h:  friend std::ostream& 
operator<<(std::ostream& out, const Calculator_add_presult& obj);
./tutorial/cpp/gen-cpp/Calculator.h:  friend std::ostream& 
operator<<(std::ostream& out, const Calculator_calculate_args& obj);
./tutorial/cpp/gen-cpp/Calculator.h:  friend std::ostream& 
operator<<(std::ostream& out, const Calculator_calculate_pargs& obj);
./tutorial/cpp/gen-cpp/Calculator.h:  friend std::ostream& 
operator<<(std::ostream& out, const Calculator_calculate_result& obj);
./tutorial/cpp/gen-cpp/Calculator.h:  friend std::ostream& 
operator<<(std::ostream& out, const Calculator_calculate_presult& obj);
./tutorial/cpp/gen-cpp/Calculator.h:  friend std::ostream& 
operator<<(std::ostream& out, const Calculator_zip_args& obj);
./tutorial/cpp/gen-cpp/Calculator.h:  friend std::ostream& 
operator<<(std::ostream& out, const Calculator_zip_pargs& obj);
./tutorial/cpp/gen-cpp/shared_types.cpp:std::ostream& operator<<(std::ostream& 
out, const SharedStruct& obj) {
./tutorial/cpp/gen-cpp/tutorial_types.h:  friend std::ostream& 
operator<<(std::ostream& out, const Work& obj);
./tutorial/cpp/gen-cpp/tutorial_types.h:  friend std::ostream& 
operator<<(std::ostream& out, const InvalidOperation& obj);
./tutorial/cpp/gen-cpp/SharedService.h:  friend std::ostream& 
operator<<(std::ostream& out, const SharedService_getStruct_args& obj);
./tutorial/cpp/gen-cpp/SharedService.h:  friend std::ostream& 
operator<<(std::ostream& out, const SharedService_getStruct_pargs& obj);
./tutorial/cpp/gen-cpp/SharedService.h:  friend std::ostream& 
operator<<(std::ostream& out, const SharedService_getStruct_result& obj);
./tutorial/cpp/gen-cpp/SharedService.h:  friend std::ostream& 
operator<<(std::ostream& out, const SharedService_getStruct_presult& obj);
./tutorial/cpp/gen-cpp/tutorial_types.cpp:std::ostream& 
operator<<(std::ostream& out, const Work& obj) {
./tutorial/cpp/gen-cpp/tutorial_types.cpp:std::ostream& 
operator<<(std::ostream& out, const InvalidOperation& obj) {
./tutorial/cpp/gen-cpp/shared_types.h:  friend std::ostream& 
operator<<(std::ostream& out, const SharedStruct& obj);
{noformat}

Those have no implementations, however since they are never referenced, they 
are ignored by the compiler.
As part of THRIFT-3336 I will limit the output to user defined types, and 
provide an overridable implementation.

> Thrift objects should have a default string representation
> ----------------------------------------------------------
>
>                 Key: THRIFT-2067
>                 URL: https://issues.apache.org/jira/browse/THRIFT-2067
>             Project: Thrift
>          Issue Type: Improvement
>          Components: C++ - Compiler, C++ - Library
>            Reporter: Vitali Lovich
>            Assignee: Konrad Grochowski
>             Fix For: 0.9.2
>
>
> Just like thrift objects implement a custom toString in Java, there should be 
> an inline friend function that writes a text representation of the struct to 
> a std::ostream.  Probably makes sense for the text representation to be 
> similar to C++:
> {code}
> class MyThriftClass {
>     friend std::ostream& operator<<(std::ostream& o, MyThriftClass) {
>         o << "MyThriftClass[";
>         o << "field1=" << field1;
>         if (__isset.field2) {
>              o << ", field2=" << field2;
>         }
>         o << ", list1=" << apache::thrift::util::to_string(list1);
>         return o << "]";
>     }
>     // ...
> }
> {code}
> There will also probably be a util.h file to include that implements generic 
> template to_string for lists, maps, & sets.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to