Difference between revisions of "DIP40"
Timotheecour (talk | contribs) (→Abstract) |
Timotheecour (talk | contribs) |
||
Line 28: | Line 28: | ||
== Abstract == | == Abstract == | ||
− | A proposed feature of C++14 is to introduce template parameter deduction for constructors, see [http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3602.html paper]. | + | A proposed feature of C++14 is to introduce template parameter deduction for constructors, see [http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3602.html paper], mentioned ]http://www.meetingcpp.com/index.php/br/items/a-look-at-c14-and-beyond-papers-part-4.html here]. |
The idea is to deduce template parameters when calling a constructor given the arguments given to the constructor, whenever possible. A compile error occurs when the deduction is ambiguous. | The idea is to deduce template parameters when calling a constructor given the arguments given to the constructor, whenever possible. A compile error occurs when the deduction is ambiguous. | ||
The benefits would be: | The benefits would be: | ||
Line 37: | Line 37: | ||
== Example == | == Example == | ||
<syntaxhighlight lang="d"> | <syntaxhighlight lang="d"> | ||
+ | import std.typecons; | ||
auto a=Tuple!(int, double)(1,1.0); //not DRY | auto a=Tuple!(int, double)(1,1.0); //not DRY | ||
auto a=tuple(1,1.0); //boilerplate in std.typecons: requires auxiliary class instantiator function 'tuple' just to allow this | auto a=tuple(1,1.0); //boilerplate in std.typecons: requires auxiliary class instantiator function 'tuple' just to allow this | ||
auto a=Tuple(1,1.0); //proposed syntax that deduces type parameters | auto a=Tuple(1,1.0); //proposed syntax that deduces type parameters | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | Another example: | ||
== Extension == | == Extension == |
Revision as of 01:50, 13 May 2013
Contents
DIP 40: Template parameter deduction for constructors (do not read yet, still editing)
Title: | Template parameter deduction for constructors. |
---|---|
DIP: | 40 |
Version: | 1 |
Status: | Draft |
Created: | 2013-05-12 |
Last Modified: | 2013-05-12 |
Author: | Timothee Cour |
Links: |
Abstract
A proposed feature of C++14 is to introduce template parameter deduction for constructors, see paper, mentioned ]http://www.meetingcpp.com/index.php/br/items/a-look-at-c14-and-beyond-papers-part-4.html here]. The idea is to deduce template parameters when calling a constructor given the arguments given to the constructor, whenever possible. A compile error occurs when the deduction is ambiguous. The benefits would be:
- make the code more DRY
- make boilerplate of class instantiators unnecessary in most cases (they're all over phobos, eg: std.typecons.tuple, std.typecons.rebindable etc)
- make D more consistent: it deduces template parameters for functions, so why not for constructors, when this is unambiguous?
Example
import std.typecons;
auto a=Tuple!(int, double)(1,1.0); //not DRY
auto a=tuple(1,1.0); //boilerplate in std.typecons: requires auxiliary class instantiator function 'tuple' just to allow this
auto a=Tuple(1,1.0); //proposed syntax that deduces type parameters
Another example:
Extension
A possible extension is to also allow template parameter deduction for static functions, using the same mechanism as for templates.
Copyright
This document has been placed in the Public Domain.