Re: Default type for second template parameter of std::pair
On Oct 23, 3:19 pm, Hyman Rosen <hyro...@mail.com> wrote:
Alexei Alexandrov wrote:
I've had quite a bit of cases where I need to represent 2 values
> of the same type and this default would make my code rather shorter.
Just do
template <typename T> struct tpair { typedef std::pair<T, T> t; };
Then you can say
tpair<std::vector::const_iterator>::t
This solution requires a lot of "scaffolding" (whose purpose may not
be immediately evident). Furthermore, the name of the resulting
"alias" - falls far short of the ideal. Instead of being able to use
tpair<T> as an alias for std::pair<T, T>, the programmer must remember
to specify tpair<T>::t instead. And adding yet another scoped type to
an already overabundant supply of scoped types, will not make working
with the Standard Library's templates classes any easier - that much
is certain.
So a more elegant solution would map std::pair<T, T> to tpair<T> both
directly and succinctly:
template <class T>
using tpair = std::pair<T, T>;
Note that this solution relies on "template aliases" - a C++09
language feature that is probably not (yet) supported by current C++
compilers. So the practicality of this approach is open to question.
Nevertheless, when support for template aliases does arrive, it will
certainly make for a nice addition to the language.
Greg
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]