在运行时声明成员变量和类型

时间:2018-04-25 21:08:02

标签: c++ templates shared-ptr unordered-map multimap

以下是我昨天提出的一个问题,该问题得到了很好的回应,但却给我带来了一个全新的问题/误解。要查看上一篇文章,请参阅constructing templated containers that are themselves shared_ptr types

以下是参考代码:

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名成员的班级。前两个都是多图,但一个按降序排序,另一个按升序排序。我还有一个无序的映射,它将结构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,每个A都有x个成员,它们是升序类型或降序类型迭代器,它们将在运行时被识别。据我所知,模板是编译时构造,所以如何解决这个问题而不必为升序或降序迭代器求助于存储信息?

如果我提供的信息不足以解决问题,请告诉我。我试图平衡什么是必要的,什么是过度的。感谢。

0 个答案:

没有答案