代码之家  ›  专栏  ›  技术社区  ›  George Godik

模板typedefs-你的工作是什么?

  •  71
  • George Godik  · 技术社区  · 16 年前

    here . 当前的C++规范没有。

    你喜欢用什么作为工作场所?容器对象还是宏? 你觉得值得吗?

    3 回复  |  直到 12 年前
        1
  •  103
  •   Konrad Rudolph    16 年前

    你喜欢用什么作为工作场所?容器对象还是宏?你觉得值得吗?

    规范的方法是使用如下的元函数:

    template <typename T>
    struct my_string_map {
        typedef std::map<std::string, T> type;
    };
    
    // Invoke:
    
    my_string_map<int>::type my_str_int_map;
    

    这也在STL中使用( allocator::rebind<U> bioinformatical library .

    它有些臃肿,但99%的时候它是最好的选择。在这里使用宏不值得有很多缺点。

        2
  •  11
  •   xghost    15 年前
    template <typename T>
    struct my_string_map : public std::map<std::string,T> 
    {
    };
    

    您不应该从没有虚拟析构函数的类继承。这与派生类中的析构函数在应该调用时没有被调用有关,最终可能会导致内存未分配。

    也就是说,在上面的实例中,您可以******可能******不受影响,因为您没有向派生类型添加更多数据。请注意,这不是背书。我还是建议你 去做吧。事实上你 可以 这并不意味着你 .

    编辑:是的,这是对ShaChris23帖子的回复。我可能错过了一些东西,因为它显示在他/她的信息上方,而不是下方。

        3
  •  0
  •   Andrei Pokrovsky    9 年前