类范围typedef不好的做法?

Sir*_*lot 9 c++

在类范围声明typedef是不好的做法吗?为每个函数声明它们以确保没有人包含该文件然后创建具有相同名称的东西更好吗?

例如

typedef std::vector<int>::size_type vec_int;
Run Code Online (Sandbox Code Playgroud)

在我的一些标题中会有用,因为在某些类中有许多使用此类型的函数,但另一方面我必须将它放在标题中,不是吗?或者我可以把它放在源文件的顶部?

GMa*_*ckG 14

我要说的是将范围保持在最低限度; 有了它,做任何最干净的事情.

如果将它用于一个函数,请将其保留在该函数的范围内.如果将它用于多个函数,请将其设置为私有typedef.如果您希望其他人使用它(可能不是实用程序),请将其公之于众.

在代码中:

namespace detail
{
    // By convention, you aren't suppose to use things from
    // this namespace, so this is effectively private to me.

    typedef int* my_private_type;
}

void some_func()
{
    // I am allowed to go inside detail:
    detail::my_private_type x = 0;

    /* ... */
}

void some_other_func()
{
    // I only need the typedef for this function,
    // so I put it at this scope:
    typedef really::long::type<int>::why_so_long short_type;

    short_type x;

    /* ... */
}

typedef int integer_type; // intended for public use, not hidden

integer_type more_func()
{
    return 5;
}

class some_class
{
public:
    // public, intended for client use
    typedef std::vector<int> int_vector; 

    int_vector get_vec() const;

private:
    // private, only for use in this class
    typedef int* int_ptr;
};
Run Code Online (Sandbox Code Playgroud)

希望这可以让你了解我的意思.


Unc*_*ens 11

类范围typedef非常好,它们不能与类范围之外的任何东西冲突.

标准库与类范围的typedef分组(value_type,pointer,reference,iterator,const_iterator等等等等).