我有一个类 A,类 B 和类 C 派生自该类。 C 类中存在一个匿名命名空间方法,例如“callMePlease”。现在,想法是将其拉出到父类。尽管将此方法标记为 Protected @ base class A 更有意义,但我想知道我们是否可以在 A 的匿名 block 中使用此方法,但仍可由 B 和 C 使用。
所以,这是我的问题。如果我在 A 中定义一个命名空间 [anonymous] 并在那里定义这个方法 'callMePlease',我是否可以在 B 或 C 中使用它?
这是我试过的。在我的 A.hxx 中,如果我声明并定义了方法,我就可以在 C.cxx 中使用它。但是,如果我在 A.hxx 中声明方法并定义其主体 A.cxx,当我尝试在 C.cxx 中使用它时会出现链接错误
有人可以帮我理解这个吗?有办法做到这一点吗?
谢谢, 帕万。
编辑:当前类表示
class C public A
C.cxx
namespace
{
void callMePlease()
{
std::cout<<"Thanks for calling!";
}
}
void methodSpecificToC()
{
// Do some processing.
callMePlease();
}
class B public A
B.cxx
void methodSpecificToB()
{
// Need to call callMePlease here too.
}
最佳答案
匿名命名空间
中的函数在整个翻译单元中可见。但是,它们在外部是不可见的。在您的情况下,void callMePlease()
将在 C.cxx
中从其定义点和下方有效可见/可调用(请参见下方代码):
C.cxx
namespace
{
void callMePlease()
{
std::cout<<"Thanks for calling!";
}
};
void C::methodSpecificToC()
{
// Do some processing.
callMePlease(); // callable because is defined above me.
}
关于c++ - 在匿名 block 的情况下继承如何工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23823066/