Subject: Re: [boost] Generic type inferencer function?
From: Nat Goodspeed (nat_at_[hidden])
Date: 2015-12-21 09:14:24
On Fri, Dec 18, 2015 at 11:50 AM, Nevin Liber <nevin_at_[hidden]> wrote:
> On 18 December 2015 at 10:37, Stefan Seefeld <stefan_at_[hidden]> wrote:
>> On 18.12.2015 11:20, Nat Goodspeed wrote:
>> > Am I overlooking a generic boost::make<something>() of this general form?
>> Given the small amount of code potentially to be reused, what would be
>> the advantage of having a generic version ? The goal of abstraction
>> should be clarity, but more often than not, generalizing code rips off
>> not only unnecessary details but also its meaning, making the code
>> harder, not easier, to understand.
> I disagree. The make_* functions are just noise, and I'd love to see a
> generic one. While return type deduction has made it somewhat easier to
> write these functions, a generic one would be superior.
Nevin speaks truth: the make_SomeTemplate() functions in our code base
are just boilerplate.
More importantly, encountering make_SomeTemplate() in the code
*increases* the cognitive load on the maintainer. What does
make_SomeTemplate() do? Oh: it returns an instance of
SomeTemplate<deduced args>. Every such call requires an indirection:
the maintainer must look up make_SomeTemplate() to discover its role.
If we introduce a std::make() template function, that becomes part of
the maintainer's working vocabulary. S/he only needs to look it up
You could reasonably argue that a consistent naming convention
(make_SomeTemplate() should surely return an instance of SomeTemplate)
nearly eliminates the cognitive burden. And you'd almost be right --
if we could trust that no such function ever snuck in any side
I would counter that std::make<SomeTemplate>() is an even clearer
"naming convention." Moreover, I could be pretty confident that
std::make() would have no undocumented side effects.
I applaud Vicente's work at
Vicente, would you be willing to float the library via Boost?
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk