I have seen the uint8_t *, uint32_t tuple mostly with C-style system level 
calls (e.g., reading from a resource). Perhaps these could be allowed to remain 
as part of lowering impedance with a legacy API.

Sarge

> On 18 Oct, 2017, at 15:08, Mark Hanson <mhan...@pivotal.io> wrote:
> 
> Sorry about that last email...  to begin again....
> 
> Hello All,
> 
> So in doing some work on this subject, we have come across a case that David 
> and I believed was worth raising for discussion.
> 
> As one might expect, at some point, someone is going to pass in a buffer and 
> a length into a function and expect data put into that buffer, e.g.
> inline void readBytesOnly(int8_t* buffer, uint32_t len) {
>  if (len > 0) {
>    checkBufferSize(len);
>    std::memcpy(buffer, m_buf, len);
>    m_buf += len;
>  }
> }
> 
> That throws a kink into the whole no out variables discussion. It is 
> addressable, for this question, we want to know how the community would like 
> to move forward, would it be best just to leave an API like this  alone and 
> call it exceptional?  Would it be best for us to allocate a std::unique_ptr, 
> or less desirably a share_ptr? I could see leaving it as is, because the java 
> API does this and it give greater discretion to the caller, however, I think 
> a fine case can be made for using a unique_ptr as well.
> 
> From a higher level for this API only, should we get rid of this API and have 
> it dealt with through its more standard types? This is kind of an end run for 
> accessing generic data, if you look at it right… 
> 
> What do you think?
> 
> Thanks,
> Mark
> 
> 
> On Wed, Oct 18, 2017 at 2:49 PM, Mark Hanson <mhan...@pivotal.io 
> <mailto:mhan...@pivotal.io>> wrote:
> Hello All,
> 
> So in doing some work on this subject, we have come across a case that David 
> and I believed was worth raising for discussion.
> 
> As one might expect, at some point, someone is going to pass in a buffer and 
> a length into a function and expect data put into that buffer, e.g.
> 
> 
> On Tue, Oct 3, 2017 at 4:26 PM, Jacob Barrett <jbarr...@pivotal.io 
> <mailto:jbarr...@pivotal.io>> wrote:
> Voting on the conversation around C++ return values vs. out parameters.
> This vote is to adopt the standard of return values over the use of out
> parameters. On functions that must return more than one value to use the
> C++11 std::tuple type for future compatibility with C++17.
> 
> For example:
> 
> std::tuple<int, std::string> foo::getAAndB() {...}
> 
> And call it with:
> 
> int a;
> std::string b;
> std::tie(a, b) = foo.getAAndB();
> 
> Alternatively the tuple can be called like:
> 
> auto r = foo.getAAndB();
> auto a = std::get<0>(r);
> auto b = std::get<1>(r);
> 
> In C++17:
> 
> auto [a, b] = foo.getAAndB();
> 
> 
> 
> Rather than:
> 
> int foo::getAAndB(std::string& b) {...}
> 
> Called like
> 
> std::string b;
> auto a = foo.getAAndB(b);
> 
> -Jake
> 
> 

Reply via email to