使typedef局部于文件或子类

| 我将2个程序合并为一个,在2个不同的文件(我有很多文件)中,我有一个具有相同名称的typedef,但是类型不同。 这些类型将在程序的完全不同的部分中使用,并且永远不会互相交谈或互换使用。 我可以在其中一个文件中进行搜索替换,但是我想知道是否还有另一种解决方案。 将typedef绑定到特定文件之类的东西。 或将typedef局部化为类及其子类。 谢谢     
已邀请:
        您可以将那些
typedef
封装在
namespace
中:
namespace N1 {
  typedef int T;
}
namespace N2 {
  typedef int T;
}
在您想使用的第一个“ 0”文件中,只需声明:
using namespace N1;
其他人也一样。     
        ѭ0始终是“文件本地”。因此,尚不清楚“将其本地化为文件”是什么意思。 Typedef不会引入具有自身链接的实体,它只是为现有类型创建别名。因此,根本不存在“将其本地化为文件”的问题。每个typedef仅在声明它的翻译单元(文件)中可见。因此,如果您可以确保同名的ѭ0永远不会在同一个翻译单元中相遇,那么您的问题就会得到正式解决。 尽管具有相同的typedef-name引用不同文件中的不同类型,但这不是一个好的编程习惯,除非这些文件自然地以某种方式分开(例如,属于不同的库或类似的东西)。 否则,您始终可以重命名ѭ0之一,或使其成为类成员或名称空间成员。请记住,尽管在一般情况下,使一个类的“ 0”成为成员几乎需要与重命名该类相同的工作:对“ 0”的引用必须在它们存在的每个位置进行更新。命名空间可能会更容易一些,因为有了命名空间,您可以使用
using
指令。 但是同样,如果您的“ 0”仅来自两个不相交的文件集,则此问题不正式存在。如果某些文件应同时使用两个“ 0”,那么您必须花费的精力来修复这些文件将等同于重命名“ 0”(无论您最终选择哪种方法)。     
           [...]或将typedef设置为本地类   及其子类。 好吧,这很简单:
struct A
{
 typedef int X;
}; 

struct B : A 
{ 
 X a; 
}; 

struct C
{
 typedef double X;
}; 
Typedef的作用域为C ++。     

要回复问题请先登录注册