使用typedef作为一种方便替换类名的方法是否是一种误用? 在我的C++库中,在许多模块中,我使用TyPulf这样: class ClassName { //... } typedef ClassName AlternateClassName;

使用typedef作为一种方便替换类名的方法是否是一种误用? 在我的C++库中,在许多模块中,我使用TyPulf这样: class ClassName { //... } typedef ClassName AlternateClassName;,c++,typedef,C++,Typedef,我这样做只是为了让我自己和其他潜在的人能够允许我的类被命名为正式类以外的名称,而不仅仅是同义词。这是typedef的正常使用吗?这是一个有效的用例。另一种情况是通常用于实例化模板 typedef std::向量动态; 如果您使用的是C++11,那么我建议改为使用关键字 使用DynamicInts=std::vector; 使用typedef可以吗 嗯,是的 我与不止一个团队合作,他们使用了压缩类名的思想。我没有听到任何抱怨 class ClumsyButAccuratelyDescriptive

我这样做只是为了让我自己和其他潜在的人能够允许我的类被命名为正式类以外的名称,而不仅仅是同义词。这是typedef的正常使用吗?

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

typedef std::向量动态; 如果您使用的是C++11,那么我建议改为使用关键字

使用DynamicInts=std::vector; 使用typedef可以吗

嗯,是的

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

class ClumsyButAccuratelyDescriptiveName_t {
//...
}

typedef ClumsyButAccuratelyDescriptiveName_t CAD_t;
typedef在这里很好,但它的现代替换使用更好。使用将使用更常见的从左到右语法,也可以对其进行模板化

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

vec_size_type<int> sz;

我所研究的产品是用于电信传输的嵌入式系统。请注意,以_t结尾的名称是保留的。@Ayxan我想这只适用于POSIX。谢谢。。。我没有在任何地方看到保留的“\u t”,但今天在“C和posix”中找到了它。请参阅:保留了一些额外的标识符名称类,以便将来扩展到C语言或POSIX.1环境。我还没有发现C++的保留,但是我确实在C++代码中使用了偶尔的POSIX函数。还有,在我使用'\u t'后缀进行压缩和其他问题的生产团队中,所有这些类都是唯一名称空间的一部分。因此,CAD\t定义在名称空间HIL中,其中HIL是本地行话或首字母缩略词,表示硬件接口层,成为HIL::笨拙但准确的描述名称。我认为这将防止与Posix定义发生任何冲突。但我认为CAD_t这样的宏仍然是一个挑战,我强烈怀疑typedef的语法与变量的声明是相同的。int x;,变量typedef int x;x是int的别名。它也有一个非常C的味道,所以void*fp;,函数指针。typedef void*fp;,fp是提供函数指针的类型的别名。@user4581301观点正确。我想我应该为这个答案找到typedef的另一个失败案例。你已经把它钉在这里了。你可以做任何事,但做起来的困难可能会。。。讨厌。函数指针可能是一个很好的失败案例。我看到过一些非常丑陋的噩梦。其中一个陷阱是你不能使用AlternateClassName作为转发声明。好吧,你仍然必须包含文件,这违背了目的
template <typename T>
struct vec_size_type{
    typedef typename std::vector<T>::size_type type;
};

vec_size_type<int>::type sz;