On Saturday, 28 November 2015 at 12:20:36 UTC, Timon Gehr wrote:
3. (Non-internal) factory function:

auto c1 = myCollection(1,2,3);
auto c2 = myCollection!int();
auto c3 = c2; // refers to the same collection as c2

Yeah. In general, I prefer that approach. It's what we currently do with RedBlackTree. It's more flexible (e.g. it can infer the element type like we do with dynamic arrays) and less verbose. The only downside that I can think of is that it doesn't work as well in generic code that's creating a container (as in where the container type is a template argument), but that's not something that's done normally. And if the factory function is just making using templated constructors cleaner, then generic code that's constructing such a container can still use the constructors. It just wouldn't be as nice as using the factory function.

But for almost all cases, a non-internal factory function named after the container is less verbose and more flexible.

- Jonathan M Davis

Reply via email to