是否可以从 cpp 中定义的静态方法调用私有构造函数?

ans*_*art 5 c++

一个 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)

Alb*_*ert 4

你可以加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 等大型项目中被大量使用。