使typedef成为文件或子类的本地

mon*_*ing 4 c++ scope typedef class

我正在将2个程序合并为一个,并且在2个不同的文件中(我有很多文件),我有一个同名的typedef,但不同的类型.

这些类型将在程序的完全不同的部分中使用,并且永远不会相互通信,或者可以交互使用.

我可以因为只是在其中一个文件中进行搜索替换,但我想知道是否有另一个解决方案.

类似于将typedef绑定到特定文件的东西.或者为类创建一个typedef,它是子类.

谢谢

AnT*_*AnT 8

typedefs 始终是 "文件的本地".因此,"将其置于文件本地"并不清楚您的意思.Typedef不会引入具有自己的链接的实体,它只是为现有类型创建别名.因此,"将文件置于文件本地"的问题根本不存在.每个typedef仅在声明它的转换单元(文件)中可见.所以,如果你能确保你的同名的typedefs永远不会在一个共同的翻译单元中相遇,你的问题就会得到正式的解决.

虽然将相同的typedef-name引用到不同文件中的不同类型,但这不是一个好的编程习惯,除非这些文件以某种方式自然分离(如属于不同的库,或类似的东西).

否则,您始终可以重命名其中一个typedefs,或使其成为类成员或命名空间成员.请记住,虽然在一般情况下,创建一个typedef类的成员将需要几乎与重命名它相同的工作:对它的引用typedef必须在它们存在的每个地方更新.命名空间可能更容易一些,因为对于命名空间,您可以使用using指令.

但同样,如果你的typedefs只是从两个不相交的文件集中引用,那么问题就不会正式存在.如果存在应该同时使用这两个文件的文件typedef,那么您必须花费修复这些文件的工作量相当于重命名typedefs(无论您最终选择哪种方法).

  • 如果“typedef”位于到处都包含的头文件中,那么它不会是该文件的本地文件。 (2认同)

iam*_*ind 4

您可以将它们封装typedefnamespace

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)

另一个也同样如此。