使用typedef作为一种方便替换类名的方式是一种误用吗

Is using typedef as a way to facilitate alternate class names a misuse?

本文关键字:一种 方式 方便 typedef 使用 替换      更新时间:2023-10-16

在我的C++库中,在许多模块中,我使用typedef,如下所示:

class ClassName {
//...
}
typedef ClassName AlternateClassName;

我这样做只是为了让自己和潜在的其他人能够允许我的类被官方名称之外的名称调用——只不过是一个同义词。这可以使用typedef吗?

这是一个有效的用例。这方面的另一种情况通常用于实例化模板。

typedef std::vector<int> DynamicInts;

如果您使用的是C++11,那么我建议使用using关键字。

using DynamicInts = std::vector<int>;

typedef在这里很好,但它的现代替代品using更好。using使用了更常见的从左到右的语法,它也可以被模板化

template <typename T>
using vec_size_type = typename std::vector<T>::size_type;
vec_size_type<int> sz;

typedef的替代方案很笨拙:

template <typename T>
struct vec_size_type{
typedef typename std::vector<T>::size_type type;
};
vec_size_type<int>::type sz;

这是typedef的一个可以使用的用法吗?

IMHO,是的。

我与不止一个团队合作过,他们使用了"压缩"类名的想法。我没有听到任何抱怨。

class ClumsyButAccuratelyDescriptiveName_t {
//...
}
typedef ClumsyButAccuratelyDescriptiveName_t CAD_t;