use*_*122 19 .net c# c++ visual-c++
我试图将一些代码从C#反向移植到C++以解决一个恼人的问题,并且想知道是否有人知道C#的'内部'相当于C++中的内容.
这是一个使用它的例子:
internal int InternalArray__ICollection_get_Count ()
{
return Length;
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*Jon 19
internal在C++中没有直接的等价物.除了public/ protected/ private唯一的其他访问控制机制之外friend,还有一种机制可以允许特定的类访问您自己类的所有成员.
因此它可以用作类似的internal访问控制机制,最大的区别在于:
friend逐个显式地声明类friend类可以毫无例外地访问所有成员; 这是一个极高的访问水平,可以引入紧耦合(这就是为什么习惯性的反射反应friend是"你真的需要吗?")另请参见何时在C++中使用"朋友"?
如果您的想法是将整个模块彼此隔离,您可以尝试保留两组头文件——一组使用“公共”方法,另一组使用“内部”方法。我不确定此时如何避免重复;AFAIK 一个类只能在编译单元中声明一次,并且公共和内部头都需要一个完整的类定义。一种,公认的非常笨拙的方法是拥有像_Foo.public.h和_Foo.internal.h仅包含方法声明的部分文件,而“真正的”头文件将其中一个或两个都包含在类声明主体中:
class Foo {
#include "_foo.public.h"
}
Run Code Online (Sandbox Code Playgroud)
class Foo {
#include "_foo.internal.h"
}
Run Code Online (Sandbox Code Playgroud)
源文件会引用它们自己模块的内部头文件,但会引用它们的依赖项的公共头文件。应该可以调整项目布局并构建脚本以使其合理透明。(例如,为每个模块设置正确目录的包含路径。)
这只是隐藏了“内部”成员而不是实现实际的访问控制,因此假设模块是单独编译的并被视为二进制依赖项。如果您通过将依赖项包含在源代码树中并一次编译所有内容来处理依赖项,则无论如何您都需要能够构建它们,并且内部方法声明可能仍然存在于构建中。
| 归档时间: |
|
| 查看次数: |
14378 次 |
| 最近记录: |