我有一个A类,B和C类来自。 C类中存在一个现有的匿名命名空间方法,比如'callMePlease'。现在,我们的想法是将它拉出到父类。虽然将此方法标记为受保护的@基类A更有意义,但我想知道在A中的匿名块中是否有我们可以使用此方法,但是B和C可以使用它。
所以,这是我的问题。如果我在A中定义了一个名称空间[匿名]并在那里定义了这个方法'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.
}
答案 0 :(得分:1)
匿名namespaces
中的功能在整个翻译单元中可见。但是,它们在外部不可见。在您的情况下void callMePlease()
将从C.cxx
的定义及其下方(见下面的代码)中有效地显示/调用:
namespace
{
void callMePlease()
{
std::cout<<"Thanks for calling!";
}
};
void C::methodSpecificToC()
{
// Do some processing.
callMePlease(); // callable because is defined above me.
}