在C ++中使用C和普通函数,我可以使用static
关键字阻止导出函数符号:
static int foo(int a, int b) { /* ... */ }
但是在一个类中,将函数定义为static
具有完全不同的含义。有没有办法确保编译器我的整个类只能在模块中使用,而且不需要导出它的任何方法符号?
答案 0 :(得分:7)
使用匿名命名空间。
namespace
{
class C
{
C() {}
void f() {}
};
void f();
}
class ExportedClass
{
ExportedClass() {}
void f() {}
};
void exportedFunction() {}
正如您所看到的,您也应该为正常功能执行此操作。不建议使用static
。
答案 1 :(得分:5)
您可以使用匿名命名空间。例如,
// file foo.cc
namespace {
int symbol1 = 0;
struct auxiliary { /* ... */ } symbol2;
}
void foo(int x)
{
// uses symbol1 and symbol2
}
当symbol1
和symbol2
不“可见”时。
答案 2 :(得分:-4)
根据您的需要以及为什么这样做,您可以将类移动到.cpp文件中。例如,如果您要实现库,则可以使用此方法。请查看Putting class declaration in .cpp file
上的讨论更具体地说,您的课程应该使用独立的翻译单元,远离主要课程,远离课程以外的课程。