一个 C++ n00b 问题。是否可以从 cpp 中定义的静态方法调用私有构造函数?如果可能的话,我想将方法保留在头文件之外——我认为应该有一种方法可以做到这一点。我在尝试此操作时遇到错误:
“无法访问类 SomeClass 中声明的私有成员”
/////////////////
// SomeClass.h //
/////////////////
class SomeClass {
public:
static SomeClass SomeMethod();
private:
SomeClass(int i);
}
///////////////////
// SomeClass.cpp //
///////////////////
static SomeClass OSImplementation() {
return SomeClass(0);
};
// calls implementation
SomeClass SomeClass::SomeMethod() {
return OSImplementation();
}
Run Code Online (Sandbox Code Playgroud)
你可以加OSImplementation个好友方法。
或者您可以OSImplementation在类中创建一个静态方法(但必须在标头中声明)。
或者,最常见的方法可能是拥有一个内部实现类,如下所示:
class SomeClass {
public:
//...
private:
struct Impl;
Impl* intern;
};
Run Code Online (Sandbox Code Playgroud)
在您的 cpp 文件中,您声明struct SomeClass::Impl.
在您的构造函数中,创建SomeClass::Impl实例。在析构函数中将其删除。并实现复制构造函数和赋值运算符!
这称为 PIMPL(指向实现的指针)习惯用法(维基百科、c2.com)。它在 Qt 等大型项目中被大量使用。
| 归档时间: |
|
| 查看次数: |
9609 次 |
| 最近记录: |