Как вы инициализируете статический шаблонный контейнер? - PullRequest
7 голосов
/ 05 октября 2010

Я пытаюсь найти правильный способ инициализации статической переменной контейнера, значением шаблона которой является закрытый внутренний класс.Вот игрушечный пример

#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

Я также пробовал

...

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

Это работает, если class Bar объявлено за пределами class Foo, но с точки зрения дизайна это уродливое решение,Любые предложения?

К вашему сведению, все объявлено в файле .h.

Ответы [ 2 ]

10 голосов
/ 05 октября 2010

Попробуйте это:

template <class myType>
vector<typename Foo<myType>::Bar*> Foo<myType>::bars;
0 голосов
/ 05 октября 2010

vector<Foo::Bar*> Foo<myType>::bars; ... обратите внимание на Foo::

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...