C++ 需要设计建议以独占方式访问私有类状态
我有一个简单的系统,涉及序列化用户对象。我有一系列专门的模板类,它们对每种类型都有不同的读/写操作:C++ 需要设计建议以独占方式访问私有类状态,c++,design-patterns,C++,Design Patterns,我有一个简单的系统,涉及序列化用户对象。我有一系列专门的模板类,它们对每种类型都有不同的读/写操作: template<class T> class ItemSerializer; template<> class ItemSerializer<int> { public: static void store( int const& obj ) { } static void fetch( int& obj
template<class T>
class ItemSerializer;
template<>
class ItemSerializer<int>
{
public:
static void store( int const& obj )
{
}
static void fetch( int& obj )
{
}
};
template<>
class ItemSerializer<NoteNumberArray>
{
public:
static void store( NoteNumberArray const& obj )
{
// NoteNumberArray::_blocks is used here.
}
static void fetch( NoteNumberArray& obj )
{
// NoteNumberArray::_blocks is used here.
}
};
如果
\u blocks
仅由ItemSerializer
使用,只需将其作为ItemSerializer
专门化的成员即可。如果不了解全部目的,我就看不出直接将这样的东西存储在noteNumberRay
中有什么好处
作为旁注,通过避免标识符上的前导
,您可以轻松避免意外使用保留名称(例如在全局名称空间中的
后跟大写或前导
),使ItemSerializer
成为NoteNumberArray
的朋友不存在依赖性问题
如果您不希望ItemSerializer
能够看到noteNumberRay
的其他私有部分,我确实看到了访问问题
一种可能是将
\u块
包装到另一个类noteNumberRaySerializerHelper
,该类将项序列化器
作为朋友,所有方法(包括构造函数和其他通常由编译器为您编写的东西)都是私有的。然后,您必须将\u块的公共访问器/变异器方法提供给NoteNumberArray
,但是除了ItemSerializer
之外,没有人可以使用这些方法来做任何事情。将存在循环依赖关系NoteNumberArray
需要为friend类
语句定义ItemSerializer
。另外,ItemSerializer::store()
需要实现NoteNumberArray
才能使用它,访问它的成员等。不,NoteNumberArray
只需要您的模板类ItemSerializer的前向声明代码>用于友元声明友元类ItemSerializer代码>一切正常。
class Block
{
};
class NoteNumberArray
{
public:
// Public interface, none of which will use _blocks. Only ItemSerializer uses _blocks.
private:
std::vector<int> _array; // This should not be used directly by anyone, including ItemSerializer.
std::vector<Block> _blocks; // This is the private state only used by ItemSerializer
};