typedefs 始终是 "文件的本地".因此,"将其置于文件本地"并不清楚您的意思.Typedef不会引入具有自己的链接的实体,它只是为现有类型创建别名.因此,"将文件置于文件本地"的问题根本不存在.每个typedef仅在声明它的转换单元(文件)中可见.所以,如果你能确保你的同名的typedefs永远不会在一个共同的翻译单元中相遇,你的问题就会得到正式的解决.
虽然将相同的typedef-name引用到不同文件中的不同类型,但这不是一个好的编程习惯,除非这些文件以某种方式自然分离(如属于不同的库,或类似的东西).
否则,您始终可以重命名其中一个typedefs,或使其成为类成员或命名空间成员.请记住,虽然在一般情况下,创建一个typedef类的成员将需要几乎与重命名它相同的工作:对它的引用typedef必须在它们存在的每个地方更新.命名空间可能更容易一些,因为对于命名空间,您可以使用using指令.
但同样,如果你的typedefs只是从两个不相交的文件集中引用,那么问题就不会正式存在.如果存在应该同时使用这两个文件的文件typedef,那么您必须花费修复这些文件的工作量相当于重命名typedefs(无论您最终选择哪种方法).
您可以将它们封装typedef在namespace:
namespace N1 {
typedef int T;
}
namespace N2 {
typedef int T;
}
Run Code Online (Sandbox Code Playgroud)
在您想要首先使用的任何文件中,typedef只需声明:
using namespace N1;
Run Code Online (Sandbox Code Playgroud)
另一个也同样如此。