当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《模板typedef-你的工作是什么?》经验,为你挑选了2个好方法。

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

你喜欢用什么来解决这个问题?容器对象还是宏?你觉得它值得吗?



1> Konrad Rudol..:

你喜欢用什么来解决这个问题?容器对象还是宏?你觉得它值得吗?

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

template 
struct my_string_map {
    typedef std::map type;
};

// Invoke:

my_string_map::type my_str_int_map;

这也用在STL(allocator::rebind)和许多库中,包括Boost.我们在生物信息库中广泛使用它.

它很臃肿,但99%的情况下它是最好的选择.在这里使用宏不值得许多缺点.

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


@Zenikoder:把它称为元函数是完全合理的,大多数C++元编程专家都这样做(例如Boost人).没有一个严格的定义,但我个人称之为一个元函数,在编译时,在给定输入的情况下产生一个类型或编译时常量.也就是说,在编译时从输入到输出的任何映射.我不知道存在任何更合理或更广泛接受的定义.最后,我可以问你为什么反对这个术语的用法?
@matthieu它是一个元函数,因为它在编译时计算一个类型
如果您使用'type'而不是'Type'(或者除此之外),这将更适合Boost.MPL.哪个有用,所以我认为这是一个鼓励的好习惯.

2> xghost..:
template 
struct my_string_map : public std::map 
{
};

您不应该从没有虚拟析构函数的类继承.它与派生类中的析构函数有关,它们应该在它们应该被调用时,你最终会得到未分配的内存.

据说你可能*****在上面的实例中可能会逃脱它,因为你没有向你的派生类型添加更多数据.请注意,这不是认可.我仍然建议你要这样做.你可以这样做的事实并不意味着你应该这样做.

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


我注意到它已经很老了,但我认为确保它不鼓励不正确的做法是一件好事.下次再谈
这是否意味着回复ShaChris23的帖子?
推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有