给定我有一个带有构造函数的类,如下所示:
MClass(const char *t_source);
Run Code Online (Sandbox Code Playgroud)
实际上,有很多地方t_source是从文件中获取的,所以我正在考虑制作另一个构造器,该构造FILE器改为使用指针并将大部分样板放入其中。同时,现有的构造函数本身也有很多用途,并且包含我不想在代码中重复多次的逻辑。我正在考虑委派构造函数,但无法看到如何利用此功能,因为我需要一个以上的语句来从FILE实例中提取数据(例如分配char数组并从中读取FILE并随后删除)。所以本质上我想做这样的事情:
MClass(FILE *t_file) : MClass(MNameSpace::readFile(t_file)) {}
Run Code Online (Sandbox Code Playgroud)
但是要采取一些初步和事后行动。任何的想法?
我发现您的情况可以通过命名构造函数更好地解决。与其尝试在构造函数上下文提供的有限空间内扩展复杂性,不如简单地添加一个新的命名函数。
class MClass {
// ...
public:
static MClass fromFile(FILE *t_file);
};
MClass MClass::fromFile(FILE *t_file) {
// Preparation
MClass retVal(...);
// Post actions
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
简单,易于理解,可满足您的需求。当人们看到时,它也很好地传达了意思
MClass obj = MClass::fromFile(...);
Run Code Online (Sandbox Code Playgroud)
要启动,命名返回值优化(标准化)将避免使用命名函数来避免任何多余的副本。最终结果将是obj直接初始化的单个构造函数调用。