C++ 强制类调用顺序要求
我试图设计一个类,它封装了一些数据的处理、结果的缓存以及通过成员函数对结果的访问 我目前的设计如下:C++ 强制类调用顺序要求,c++,oop,C++,Oop,我试图设计一个类,它封装了一些数据的处理、结果的缓存以及通过成员函数对结果的访问 我目前的设计如下: class DataProcessor { public: DataProcessor(); void populateUsing(const rawDataSource &source); // Must call populateUsing() first! int getDataX() const; int getDataY() const
class DataProcessor
{
public:
DataProcessor();
void populateUsing(const rawDataSource &source);
// Must call populateUsing() first!
int getDataX() const;
int getDataY() const;
};
还有一个额外的限制:提供的rawDataSource
的生存期可能在调用populatesing()
和getData[XY]()
在达到此设计之前,我经历了各种备选方案,包括:
rawDataSource
参数传递给构造函数isPopulated
标志,由getDataX()
等检查,然后可以抛出异常、返回错误值或调用populatinging()
本身getData[XY]()
,则可能实际上不需要。我想按需执行处理
备选方案2不充分,因为:
- 我不能在这段代码中抛出异常而不引起严重的麻烦(和糟糕的用法)
- 返回错误代码可能是可能的,但需要重新排列参数以允许传递错误代码
- 无法调用
,因为不能保证populateUsing()
仍然有效rawDataSource
class DataProcessor {
public:
int getDataX(const rawDataSource &source); // Probably you should rename the methods
int getDataY(const rawDataSource &source);
};
这样,您只需在需要时处理数据。您可以检查您的数据是否已被处理并且仍然有效。我认为我的类实际上应该是这样的:
class DataProcessor
{
private:
// Moved to private. Now called by the constructor.
void populateUsing(const rawDataSource &source);
public:
DataProcessor(const rawDataSource &source);
int getDataX() const;
int getDataY() const;
};
将populationing()
作为一个公共函数的原因是允许灵活地确定何时进行(可能是密集的)处理
但是,调用方仍然可以通过在需要时(或当所需的rawDataSource有效时)简单地创建
数据处理器
对象来控制处理时间。这可能适用于其他具有类似设计要求的对象。但是,在我的例子中,在调用getData[XY]时,rawDataSource对象不可用。
class DataProcessor
{
private:
// Moved to private. Now called by the constructor.
void populateUsing(const rawDataSource &source);
public:
DataProcessor(const rawDataSource &source);
int getDataX() const;
int getDataY() const;
};