【发布时间】:2013-03-08 20:43:19
【问题描述】:
我有以下情况:
namespace MyFramework {
class A {
void some_function_I_want_B_to_use() {}
};
class B {
B() {
some_function_I_want_B_to_use() {}
}
};
}
我希望 some_function_I_want_B_to_use 在 MyFramework 命名空间之外不可见,但我确实希望它对 MyFramework 内部的任何人可见(或者,仅对 B 类可见也可以)。我有很多这样的方法,是从 MyFramework 的公共 API 中隐藏它们以使 MyFramework 中的所有类成为朋友的唯一方法吗?我也在考虑将所有“低级”类放在 B 中,但我不想走那条路,直到我确定它能够从 B 内部而不是从 B 内部访问所有 A 的方法在 MyFramework 之外。
重申一下,我有一个在一个命名空间中创建的框架,每个类都有对使用该框架的公众有用的方法。但是,每个类也有一些使公共 API 复杂化但框架正常运行所必需的方法。
【问题讨论】:
-
“可见”是什么意思?如果在头文件中可以找到函数名,但函数是
private,是否可见? -
否(出于我的目的)。我希望能够将“公共” api 列为唯一的公共方法。例如。拥有 3 个公共方法可以清楚地使用类,但拥有 20 多个方法会使类的使用不那么明显
-
some_function_I_want_B_to_use需要是A的方法吗?或者它可以是 MyFramework 中的命名空间函数吗?
-
嗯...有趣的想法。许多“some_function...”选项都在访问它们各自类中的私有变量。但是,我可能会使用 getter 来删除这个要求,并将其中的一些拉入命名空间本身。如果没有更好的方法,可能是一种有效的方法:-)
-
我忘记了这是否会授予类访问彼此的私有数据成员的权限,但是如果 MyFramework 是一个类,并且在它之下是每个类(适当的成员是私有的)呢?或者,我认为外观(设计模式)正是针对这种情况的;如果您愿意为每个类创建一个公共外观,这是一个不错的选择
标签: c++ namespaces access-modifiers