如何在列表初始化中放置额外的语句?
How do I put extra-statements in list-initialization?
假设我有一个带有构造函数的类,如下所示:
MClass(const char *t_source);
事实上,有很多地方可以从文件中获取t_source
,所以我正在考虑制作另一个构造函数,它采用指针代替FILE
并将大部分样板放在其中。同时,现有的构造函数本身也有很多用途,并且包含我不想在代码中重复多次的逻辑。我正在考虑委派构造函数,但看不到如何利用此功能的任何方法,因为我需要多个语句来从FILE
实例中提取数据(例如分配 char 数组并从FILE
读取并随后删除(。所以本质上我想做这样的事情:
MClass(FILE *t_file) : MClass(MNameSpace::readFile(t_file)) {}
但有一些初步和呼叫后的行动。知道吗?
我发现命名构造函数习惯用法可以更好地解决您的情况。与其试图将复杂性归类到构造函数上下文提供的有限空间中,不如简单地添加一个新的命名函数。
class MClass {
// ...
public:
static MClass fromFile(FILE *t_file);
};
MClass MClass::fromFile(FILE *t_file) {
// Preparation
MClass retVal(...);
// Post actions
return retVal;
}
简单,易于理解,并做你想做的事。当人们看到时,它也很好地传达了含义
MClass obj = MClass::fromFile(...);
为了启动,命名返回值优化(标准化(将避免使用命名函数的任何额外副本。最终结果将是单个构造函数调用来直接初始化obj
。
相关文章:
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 读取文件的最后一行并输入到链接列表时出错
- 复制列表初始化的隐式转换的等级是多少
- LNK2038、MSVS2017 MAGMA的原因列表
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 没有为自己的结构调用列表推回方法
- 使用简单类型列表实现的指数编译时间.为什么
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 当返回语句时,逗号运算符、大括号初始化列表和 std::unique_ptr 组合在一起
- 如何在列表初始化中放置额外的语句?
- 卡在 if 语句中,以检查列表中的数字
- 我如何为内部列表提供基于范围的语句?(C )
- 将Typedef语句放入类链接链接列表中的C 错误
- return 语句后跟初始值设定项列表
- using语句可以出现在构造函数初始化列表中吗?