在接口头文件中使用typedef是不好的做法吗?

时间:2014-07-15 02:57:32

标签: c++

我知道在头文件中使用“using namespace xxx”是一种不好的做法,但是接口头文件中的typedef呢?

例如:

typedef std::set<unsigned int> rsids_type;    //!< typedef something.
struct IRsids 
{
    virtual const rsids_type& GetRsids() = 0;
}

根据我的选择,我认为这也是一个不好的做法,我们将名称“rsids_type”导入全局命名空间?那么下面的行动呢?

struct IRsids 
{
    typedef std::set<unsigned int> rsids_type;    //!< typedef something inside the interface class.
    virtual const rsids_type& GetRsids() = 0;
}

1 个答案:

答案 0 :(得分:2)

该语言允许使用typedef不必要地污染全局名称空间,但显然不鼓励按惯例。

命名空间(以及其他内容)是为了避免名称冲突,因此将typedef放在名称空间和/或类中(作为第二个示例)。

typedefs通常会进入头文件,通常用作封装的意思(隐藏简单名称后面的复杂类型),例如: :

typedef std::vector<std::vector<double>> Matrix

标准库实现可以在任何地方完成。

注意:

  • using namespace should be avoided in headers因为标头的任何包含都会带来整个命名空间。对于typedef来说情况并非如此,它基本上是一个类型别名,所以没有问题。
  • 在C ++ 11中,typedefusing别名是等效的:

示例:

using Matrix = std::vector<std::vector<double>>;