как получить карту <A, B> и из функции / класса? - PullRequest
0 голосов
/ 20 апреля 2011

Как получить map<string, factory<BaseClass, ConstructorType> > от такой функции?

Итак, у меня есть

template <class BaseClass, class ConstructorType>
map<string, factory<BaseClass, ConstructorType> > get_factories (shared_library & lib) {
    type_map lib_types;
    if (!lib.call(lib_types)) {
        cerr << "Types map not found!" << endl;

    }

    map<string, factory<BaseClass, ConstructorType> >& lib_factories(lib_types.get());
    if (lib_factories.empty()) {
        cerr << "Producers not found!" << endl;

    }
    return lib_factories;

}

, и я пытаюсь получить его значение с чем-то вроде:

map<string, factory<PublicProducerPrototype, int> > producer_factories();
producer_factories = get_factories<PublicProducerPrototype, int>(simple_producer);

Я пытаюсь обобщить / упростить некоторые методы boost.extension для себя.

Так как правильно получить map<A, B>&?

Как правильно инициализировать ссылку или как вернуть не ссылку, а реальнуюобъект?(извините, C ++ nube)

1 Ответ

1 голос
/ 20 апреля 2011

Если вам нужна ссылка на карту, вы должны объявить функцию как возвращающую ссылку, а не значение:

template <class BaseClass, class ConstructorType>
map<string, factory<BaseClass, ConstructorType> >& get_factories (...

Конечно, это предполагает, что ссылка, возвращаемая lib_types.get(), безопасна для использования в качестве ссылки.

...