gpt4 book ai didi

C++ 嵌套类 - 将实现移动到不同的文件

转载 作者:行者123 更新时间:2023-11-30 02:41:05 25 4
gpt4 key购买 nike

我正在尝试学习如何使用 PIMPL 习惯用法,因为它减少了编译依赖性,我听说这是推荐的。所以我的代码基本上看起来像这样。

Foo.h

class Foo
{
public:
Foo();
private:
class FooImpl;
std::unique_ptr<FooImpl> impl;
}

Foo.cpp

Foo::Foo():
impl(new FooImpl)
{
}

class Foo::FooImpl
{
public:
FooImpl();
}

但现在我想在单独的 .cpp 文件中定义 FooImpl::FooImpl(),就像我在 Foo::Foo() 中所做的那样,但是我该如何去做那个?

编辑:我已经移动了一些东西以获得下面的代码,但现在初始化 impl 给我一个不完整的类型编译错误。

Foo.h

class Foo
{
public:
Foo();
private:
class FooImpl;
std::unique_ptr<FooImpl> impl;
}

Foo.cpp

#include "Foo.h"

Foo::Foo():
impl(new FooImpl)
{
}

FooImpl.cpp

#include "Foo.h"

class Foo::FooImpl
{
public:
FooImpl();
}

最佳答案

我的解决方案是将 FooImp 的定义留在 Foo 类中。

让所有类(class)成员都在那里。然后 FooImp.cpp 包含 Foo.h 并实现所有非内联函数。

我是这样工作的:

Foo.h

class Foo
{
public: // ctor & dtor
Foo();
~Foo();

private: // nested class
class FooImp
{
public:
FooImp();
~FooImp();
};

private: // member variable
std::unique_ptr<FooImpl> impl;
};

Foo.cpp

#include "Foo.h"
Foo::Foo()
{
}
Foo::~Foo()
{
}

FooImp.cpp

#include "Foo.h"
Foo::FooImp::FooImp()
{
}
Foo::FooImp::~FooImp()
{
}

它编译得很好。

关于C++ 嵌套类 - 将实现移动到不同的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28491016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com