C + + 0x 有模板别名(有时称为模板 typedefs)。
您喜欢使用什么作为工作环境? 容器对象还是宏? 你觉得值得吗?
你喜欢用什么工作?容器对象还是宏?你觉得值得吗?
规范的方法是这样使用元功能:
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。我们在 生物信息学图书馆中广泛使用它。
allocator::rebind<U>
虽然有些臃肿,但99% 的情况下它都是最好的选择。
(编辑: 正如 Daniel 在他的评论中指出的,我已经修改了代码以反映 Boost/STL 约定。)
template <typename T> struct my_string_map : public std::map<std::string,T> { };
不应该从没有虚析构函数的类继承。这与派生类中的析构函数在应该被调用时没有被调用有关,而且最终可能会导致内存分配不足。
也就是说,在上面的实例中,您可以不用再为派生类型添加任何数据。请注意,这不是一个背书。我还是建议你去做。事实上,你 可以这样做并不意味着你 应该。
编辑: 是的,这是对 ShaChris23帖子的回复。我可能错过了一些东西,因为它显示在他/她的信息上面,而不是下面。
有时,您可以显式地写出所有必要类型的非模板化 typedef。如果基类被模板化在多个模板参数上,只有一种类型需要被类型化,那么您可以继承一个专门的类,其 typedef 有效地包含在继承的类名中。这种方法不像元功能方法那样深奥。