C++ 如何在列表初始化中放入额外语句?

C++ 如何在列表初始化中放入额外语句?,c++,c++11,C++,C++11,假设我有一个带构造函数的类,它如下所示: MClass(const char *t_source); 事实上,在很多地方,t\u source是从文件中获取的,因此我正在考虑制作另一个构造函数,它使用file指针,并将大部分样板文件放在其中。同时,现有的构造函数本身也有很多用途,并且包含我不想在代码中重复多次的逻辑。我正在考虑委托构造函数,但看不到如何利用此功能,因为我需要多条语句来从文件实例中提取数据(例如分配字符数组并从文件读取,然后删除)。基本上我想做这样的事情: MClass(FILE

假设我有一个带构造函数的类,它如下所示:

MClass(const char *t_source);
事实上,在很多地方,
t\u source
是从文件中获取的,因此我正在考虑制作另一个构造函数,它使用
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

如果将公共代码放入类的(posbly static)方法中,并从两个构造函数调用它,会发生什么情况?请展示一个具有两个单独构造函数的实现的示例,其中您复制了相同的代码。这将允许通过修改代码来进行应答,使其行为保持不变,但不会复制code.delegate构造函数。像这样的东西,而且。。。。(编辑中)有我一直在等待的
静态
。。。