On Apr 30, 8:37 pm, german diago <germandi...@[EMAIL PROTECTED]
> wrote:
> Hello. I'm trying to implement a variadic vector type in c++0x with
> the variadic templates proposal (in gcc-4.4).
>
> I tried with this, and I wonder why I can't do this.
>
> template <class...Values>
> class vector {
> private:
> //This is not legal
> Values v...;
> ....
>
> };
>
> I think this should be allowed and a way to access every v would be to
> give v, v2, v3 names to the unpacked parameter pack or something
> similar.
That would be rather brittle. Compiler shouldn't invent identifiers on
its own.
> Now I'm trying to do this, which is legal:
>
> template <class... Values> class vector;
>
> template <class Head, class...Tail> class vector<Head, Tail...> :
> vector<Head, Tail...>
> {
> private:
> Head head_;
>
> };
>
> But the problem is that as every head_ variable shadows its base head_
> variable, I don't know how to access them. It woul also be nice to be
> able to implement operator[] as a constexpr to be able to index
> the vector like v[0] and so on, but I think it's not possible.
> Anyway, I think the syntax to expand variables (first example) should
> be legal because doing what I'm doing in the second example is
> unnecessarily complicated.
A much simpler way to do what you want is to use std::tuple class - in
C++0x, it is extended to use variadic templates, so inside your class
you can declare a field like this:
std::tuple<Values...> v;
And then address individual elements of the tuple as usual:
cout << get<0>(v);
cin >> get<1>(v);
....
--
[ See http://www.gotw.ca/resources/clcm.htm
for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]


|