【发布时间】:2018-11-28 19:15:01
【问题描述】:
我需要按预定顺序对多个设备执行重要的 I/O 操作。
状态(也很重要)需要按顺序维护,如果可以避免,我宁愿不将其作为参数传递给函数:操作a 比操作state.a 更简单.此外,在一个类中封装状态和对该状态的计算似乎是面向对象设计的要点之一。
这将导致类似以下情况(解决方案 1)。
头文件:
/**
* module.h
*/
void io_sequence();
实现文件:
/**
* module.cpp
*/
// Helper class, not visible outside this file
class Helper {
public:
Helper();
void help() { step1(); step2(); step3(); }
private:
void step1();
void step2();
void step3();
int a;
ComplexType b;
vector<ComplexType2> c;
};
// Implementation of Helper...
// Implementation of the public function
void io_sequence()
{
// The following two lines could be replaced by Helper().help();
Helper helper;
helper.help();
}
这可行,但为什么不使用以下方法(解决方案 2)?
头文件:
/**
* module.h
*/
void io_sequence();
实现文件:
/**
* module.cpp
*/
// Helper class, not visible outside this file.
// Invoked like a function.
class help {
public:
help() { step1(); step2(); step3(); }
private:
void step1();
void step2();
void step3();
int a;
ComplexType b;
vector<ComplexType2> c;
};
// Implementation of help...
// Implementation of the public function
void io_sequence()
{
(void) help();
}
我会选择解决方案 2,但我在 Internet 上找不到该模式的任何参考。我想这意味着它会被不赞成。
解决方案 2 不好吗?在这种情况下,您建议使用什么方法,还是可以?
请注意,我之前曾问过a similar question for Python,那里接受的解决方案似乎表明 Python 的解决方案 2 很好(根据@jsbueno 的说法是干净的)。
【问题讨论】:
-
您不需要将` (void)` 作为
help()的前缀。总的来说,我认为解决方案 2 没有问题。 -
@user463035818 编译得很好。您不需要实例。
-
@user463035818 我刚刚仔细检查过,解决方案 2 编译得很好。如果您不相信,请尝试(将 ComplexTypes 替换为整数)。你似乎没有抓住重点。
help()是一个实例化。 -
是的,它可以编译,抱歉我看错了你的代码。
-
@user463035818 另一方面,解决方案 1 或 2 中的
help()不能设为静态,因为它调用非静态成员函数。
标签: c++