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

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

你喜欢用什么工作? 容器对象还是macros? 你觉得它值得吗?

你喜欢用什么工作? 容器对象还是macros? 你觉得它值得吗?

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

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%的时间最好的select。 在这里使用macros是不值得的许多缺点。

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

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

你不应该inheritance没有虚拟析构函数的类。 这与派生类中的析构函数在应该被调用的时候没有被调用有关,你最终可能会得到未分配的内存。

这就是说,你可能会*****在上面的例子中摆脱它,因为你没有增加更多的数据到你的派生types。 请注意,这不是一个认可。 我仍然build议你要这样做。 事实上,你可以做到这一点并不意味着你应该

编辑:是的,这是对ShaChris23的post的回复。 我可能错过了一些东西,因为它出现在他/她的消息之上而不是下面。

有时你可以明确地写出所有必要types的无模板的typedef。 如果基类在多个模板参数上进行模板化,并且只有一种types需要进行typedefed,则可以inheritance一个带有有效包含在inheritance类名中的typedef的专用类。 这种方法不如元函数方法深奥。