Is there a use case in our C++ client code to ever use out parameters?

Currently code uses out parameters to return multiple values from a
function.  [1]

virtual int64_t* PdxReader::readLongArray(const char* fieldName, int32_t&
length) = 0;


In this case, we could return a tuple instead.  I think the advantage of
this is it doesn't force a separation between the variable declaration and
assignment, which may lead to spaghetti code.  I think avoiding out
parameters also leads to more well defined behavior.  What would one expect
if they called getCqListeners with an already partially populated vector?
[2]

virtual void CqAttributes::getCqListeners(std::vector<CqListenerPtr& v) = 0;


As a counter argument, could function overload resolution be a valid use
case of out parameters?  In PdxReader::readType methods, Type seems
redundant.  As a user, why should I have to call readLongArray(int64_t[]&)
rather than just call read(int64_t[]&)?  In this case, if we didn't use out
parameter our signature clashes with other read methods.

Thoughts?

Thanks,
David

[1]
https://github.com/apache/geode-native/blob/44635ffa95926c9cffecc1dcaac02fb3012d1eef/cppcache/include/geode/PdxReader.hpp#L288
[2]
https://github.com/apache/geode-native/blob/44635ffa95926c9cffecc1dcaac02fb3012d1eef/cppcache/include/geode/CqAttributes.hpp#L60

Reply via email to