[
https://issues.apache.org/jira/browse/THRIFT-370?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12682006#action_12682006
]
David Reiss commented on THRIFT-370:
------------------------------------
Oh, I forgot to mention that Jeremie is also right that we could have used
setters to manage isset, but that leads to a very unpleasant (to C++
programmers, at least) programming style.
> unset fields in structs in c++ have __isset set to true
> -------------------------------------------------------
>
> Key: THRIFT-370
> URL: https://issues.apache.org/jira/browse/THRIFT-370
> Project: Thrift
> Issue Type: Bug
> Components: Library (C++)
> Affects Versions: 0.1
> Environment: Linux 2.6.27-11 x86_64
> Reporter: Nick Lanham
> Fix For: 0.1
>
> Attachments: issetTest.tar.gz
>
>
> If you have a struct like:
> struct test_struct {
> 1:string test_string
> }
> and then in a c++ client you do:
> test_struct foo;
> client.someFunc(foo)
> then the server will see it's argument (arg) as having
> arg.__isset.test_string set to true.
> similarly from the client side if expect a return value and do:
> test_struct returnVal;
> client.someFunc(returnVal);
> and the server does not set the returnVal to anything it will still see
> returnVal.__isset.test_string as true
> in all cases the string *is* set to the empty string as the constuctor for
> test_struct sets it, but __isset should not be true.
> Attached (should be) a simple test case. Just untar run "thrift --gen cpp
> isset.thrift" and then run make. start up the server and run the client to
> see the output.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.