模板typedefs-工作是什么?

时间:2020-03-05 18:42:51  来源:igfitidea点击:

C ++ 0x具有模板别名(有时称为模板typedef)。看这里。当前的C ++规范没有。

我们喜欢在工作中使用什么?容器对象还是宏?
我们觉得值得吗?

解决方案

回答

What do you like to use as work around ? Container objects or Macros ? Do you feel its worth it ?

规范的方法是使用像这样的元函数:

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>`)和包括Boost在内的许多库中也使用了它。我们在生物信息学图书馆中广泛使用它。

它ated肿了,但是99%的时间是最好的选择。在这里使用宏是不值得承担许多缺点的。

(编辑:我已经修改了代码,以反映Daniel在评论中指出的Boost / STL约定。)

回答

template <typename T>
struct my_string_map : public std::map<std::string,T> 
{
};

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

话虽这么说,但我们可以可能在上面的实例中摆脱它,因为我们不会在派生类型中添加更多数据。请注意,这不是背书。我仍然建议我们不要这样做。我们可以做到这一点并不意味着我们应该这样做。

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