定义未命名的类成员函数?

jvp*_*nis 6 c++ class definition member-functions

我目前在 Foo.h 中定义了两个未命名的类:

class Foo {
public:
    Foo();

    class {
    private:
        int x;
        int y;
    public:
        int GetX() { return x; }
        int GetY() { return y; }
    } Sub1;

    class {
    private:
        int x;
    public:
        int GetX() { return x; }
    } Sub2;
}
Run Code Online (Sandbox Code Playgroud)

这段代码编译得很好,它是这样使用的:

 Foo temp;
 int Ax, Ay, Bx;
 Ax = temp.Sub1.GetX();
 Ay = temp.Sub1.GetY();
 Bx = temp.Sub2.GetX();
Run Code Online (Sandbox Code Playgroud)

但是,现在我想将成员函数定义移动到源文件中。我知道将此类拆分为头文件和源文件的唯一方法是命名这些类:

福.h:

class Foo {

private:    
    class A {
    private:
        int x;
        int y;
    public:
        int GetX();
        int GetY();
    };

    class B {
    private:
        int x;
    public:
        int GetX();
    };

public:
    Foo();
    A Sub1;
    B Sub2;

}
Run Code Online (Sandbox Code Playgroud)

文件.cpp:

int Foo::A::GetX() { return x; }
int Foo::A::GetY() { return y; }
int Foo::B::GetX() { return x; }
Run Code Online (Sandbox Code Playgroud)

然而,这段代码不是我想要的,因为它很丑,而且我一开始并不想要一个命名类。

是否可以将类拆分为头文件和源文件?或者这只是糟糕的代码设计?

Col*_*mbo 3

不幸的是,这是不可能的。\xc2\xa79.3/5:

\n\n
\n

如果成员函数的定义在词法上位于其类定义之外,则应使用运算符通过其类名来限定成员函数名称::

\n
\n\n

由于不存在类名,因此不可能对成员函数进行类外定义。GCC 在这种情况下允许 decltype-specifiers 的事实是一个错误。

\n