【发布时间】:2016-05-13 15:53:48
【问题描述】:
我有调用私有成员函数的公共成员函数。我想限制私有成员函数定义可用的文件中私有成员函数的范围。在C中,我在函数名前使用了static来限制其在文件中的作用域,在C++中如何实现。
class Base
{
public:
void XYZ1(void);
void XYZ2(void);
private:
void fun(void);
};
void Base::XYZ1(void)
{
fun();
}
void Base::fun(void)
{
// do something;
}
现在,如果成员函数 XYZ2 是在其他 .cpp 文件中定义的,则不应允许从中调用 fun()。基本上将 fun() 函数限制在文件范围内。 在a1.cpp中
void Base::XYZ2(void)
{
fun();// this should result in some error saying fun() is not defined in its scope.
}
【问题讨论】:
-
我认为这样的事情是不可能的,至少不能以便携的方式。
-
C++ 也允许您使用
static进行内部链接,但它对成员函数有不同的含义。这不是 C 与 C++ 的问题。 -
fun()必须是成员函数,还是非成员函数? -
唯一的解决方案是不让它们成为成员函数,而是“正常”的非成员函数。然后,您可以将它们设为
static,就像在 C 中一样,或者将它们放在匿名命名空间中。如果函数需要访问其他私有成员(函数或变量),这当然会导致问题,在这种情况下,您应该阅读the pimpl idiom。 -
学究式地说,
staticlimits linkage, not scope.
标签: c++ namespaces