Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you initialize a static templated container?

I'm trying to figure out the correct way of initializing a static container variable whose template value is a private inner class. Here's a toy example

#include <vector>

using namespace std;

template <class myType>
class Foo {
private:
    class Bar {
        int x;
    };

    static vector<Bar*> bars;
};

template <class myType>
vector<Bar*> Foo<myType>::bars; // error C2065: 'Bar' : undeclared identifier

I've also tried

...

template <class myType>
vector<Foo<myType>::Bar*> Foo<myType>::bars; // error C2059: syntax error : '>'

It works if class Bar is declared outside of class Foo but from a design standpoint this is an ugly solution. Any suggestions?

FYI, everything is declared in a .h file.

like image 727
jok3rnaut Avatar asked Oct 05 '10 18:10

jok3rnaut


1 Answers

Try this:

template <class myType>
vector<typename Foo<myType>::Bar*> Foo<myType>::bars;
like image 98
Donotalo Avatar answered Oct 19 '22 15:10

Donotalo