Объявление переменной и типа члена во время выполнения - PullRequest
0 голосов
/ 26 апреля 2018

Ниже приводится ссылка на вопрос, который я задал вчера, который получил отличный ответ, но вызвал для меня совершенно новую проблему / недоразумение.Чтобы увидеть предыдущий пост, посмотрите создание шаблонных контейнеров, которые сами являются типами shared_ptr .

Вот код ссылки:

template <class T>
struct A {
    int id;
    T x;
}

template<typename T>
using A_ptr = std::shared_ptr<A<T>>;

template<typename T>
using AMap = std::unordered_map<int , A_ptr<T>>;

Это прекрасно работает, но проблемаЯ обнаружил, что это не решает мою проблему.

У меня есть класс с 3 участниками.Первые 2 являются мультикартами, но одна сортируется в порядке убывания, а другая сортируется в порядке возрастания.У меня также есть неупорядоченная карта, которая хранит структуру A в качестве значений.В случае структуры A T x оказывается итератором для одного или другого мультикарты.Я не знаю, что до времени выполнения.Если я структурирую свой код следующим образом, он не будет компилироваться.

typedef std::shared_ptr<B_Type> B_Type_ptr;

template <class T>
struct A {
    B_Type_ptr b_ptr;
    T x;
}

template<typename T>
using A_ptr = std::shared_ptr<A<T>>;

template<typename T>
using AMap = std::unordered_map<int , A_ptr<T>>;

class MyClass {
private:
    AMap my_A_map;
    std::multimap<int, B_Type_ptr> my_C_1_map;
    std::multimap<int, B_Type_ptr, greater<int>> my_C_2_map;

}

По сути, мне нужно, чтобы AMap содержал серию из A, каждый из которых имеет x членов, которые являются восходящим или нисходящим типом.итератор, который будет известен во время выполнения.Как я понимаю, шаблоны являются конструкциями времени компиляции, поэтому как мне обойти это без необходимости прибегать к хранению информации A для восходящего или нисходящего итератора?

Пожалуйста, дайте мне знать, если предоставленная мной информациянедостаточно для решения проблемы.Я пытался сбалансировать то, что необходимо, и то, что излишне.Спасибо.

...