【发布时间】:2014-05-01 20:43:01
【问题描述】:
我希望将我的部分代码编译为静态库以包含在其他项目中。当然,我必须分发已编译的库和包含类声明和公共成员的头文件,但我不知道是否可以将所有私有成员和声明移动到与头文件不同的位置。
例子:
在project.h文件中:
class MyClass
{
public:
MyClass();
void Give_me_an_input(int);
int Get_your_output();
private:
int a, b;
int MySecretAlgorithm();
};
.cpp 文件中:
MyClass::MyClass()
{
a = 1;
b = 0;
}
void MyClass::Give_me_an_input(int c)
{
b = c;
}
int MyClass::Get_your_output()
{
return MySecretAlgorithm();
}
int MyClass::MySecretAlgorithm()
{
return (a + b);
}
有没有办法将所有私有成员int a, b; 和int MySecretAlgorithm(); 移动到与头文件不同的位置?
【问题讨论】:
-
否,因为它们是类定义所必需的。但是您可以使用例如重新实现该类pimpl idiom(以某种间接为代价。)
-
你是否关心其他人是否只能看到声明?您可以使用一些无意义的虚拟名称来声明它。然后,在
cpp文件中,实现它。在您的秘密文件中,创建一个指向此函数的指针,并使用有意义的名称 -
如果你想对使用这个库的人隐藏信息,你可以考虑使用
vector<void*>之类的东西,并根据需要转换元素。不过,它不会很漂亮。 -
+1 表示 pimpl 成语
-
您为什么要这样做?动机/目标是什么?
标签: c++ class static-libraries header-files private-members