我有一个存储类。这个类的成员经常被修改。
每次修改成员时,我想保存类的状态(克隆类实例并保存)。
所以我想创建一个新类来保存这些状态。
例如:
假设我在文件 storage.h 中有一个 Storage 类
class Storage
{
public:
Int m_cnt;
<lots of other members...>
StorageHistory m_his;
};
和文件 storagehistory.h 中的 StorageHistory 类
class StorageHistory
{
public:
std::vector<Storage> m_history_vec;
};
假设:
StorageHistory
类应保存在 Storage 类中。原因是 Storage
类是一个可以在所有类/包中访问的主类。为了尽量减少代码中的更改,我希望将 S torageHistory
与 Storage
类结合起来。 StorageHistory
不能是静态的或单例的,因为创建了 Storage
的多个实例。 问题:
StorageHistory
不能存储在 Storage
类中,那么我应该保留它吗?谁是这个类的所有者? 需要帮助来定义这两个分类之间的联系吗?
最佳答案
首先:不要公开数据成员,除非你定义了一个纯数据结构。那么:Int
不是 C++ 类型。
现在回答您的问题:您可以使用前向声明。由于 StorageHistory
直接在 Storage
中使用,所以不能前向声明,但 Storage
只用于 std::vector
中的模板数据成员(即 StorageHistory
),如果只声明为变量,该模板不需要 Storage
的定义。仅在使用 vector 方法时才需要定义。
所以这是解开的代码:
存储历史.h
#include <vector>
class Storage;
class StorageHistory
{
std::vector<Storage> m_history_vec;
public:
/* method declarations */
};
存储.h
#include "StorageHistory.h"
class Storage
{
int m_cnt;
/* <lots of other members...> */
StorageHistory m_his;
public:
/* method declarations */
};
存储.cpp
#include "Storage.h"
#include "StorageHistory.h" //not necessarily needed, because implicitly included, but thats a matter of coding style
/* ... Storage methods definitions ... */
void Storage::changeVar(/*...*/)
{
m_his.push_back(*this);
/* ... */
}
存储历史.cpp
#include "StorageHistory.h"
#include "Storage.h"
/* ... StorageHistory method definitions ... */
关于c++如何创建相互依赖的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16663207/