C ++ 0x具有模板别名(有时称为模板typedef)。看这里。当前的C ++规范没有。
您喜欢在工作中使用什么?容器对象还是宏?您觉得值得吗?
Answers:
您喜欢在工作中使用什么?容器对象还是宏?您觉得值得吗?
规范的方法是使用像这样的元函数:
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在内的许多库中也使用了它。我们在生物信息学图书馆中广泛使用它。
它肿了,但是99%的时间是最好的选择。在这里使用宏是不值得承担许多缺点的。
(编辑:我已经修改了代码,以反映Daniel在评论中指出的Boost / STL约定。)
template <typename T>
struct my_string_map : public std::map<std::string,T>
{
};
您不应该从没有虚拟析构函数的类继承。这与派生类中的析构函数在应该被调用时没有被调用有关,您最终可能会得到未分配的内存。
话虽这么说,但您可以*****可能*****在上面的实例中摆脱它,因为您不会在派生类型中添加更多数据。请注意,这不是背书。我仍然建议您不要这样做。您可以做到这一点并不意味着您应该这样做。
编辑:是的,这是对ShaChris23帖子的回复。我可能错过了一些内容,因为它显示在他/她的信息上方而不是下方。
有时,您可以为所有必需的类型明确写出未模板化的typedef。如果基类在多个模板args上进行模板化,并且只希望使用一种类型进行类型定义,则您可以继承一个带有typedef的专用类,该类实际上包含在继承的类名中。这种方法不如元函数方法那么抽象。