Eri*_*tch 1 c++ constructor class
举个例子,假设我有一个名为File. 现在文件可以以二进制或文本形式打开。我的构造函数目前是File(const char*filename). 让我们假设 open 的实现是完全不同的二进制和文本。我到底要怎么构造这个?
我考虑过使用静态函数,但我不想返回指针。我可以传入一个指针,但我宁愿不允许在没有实际初始化的情况下构造一个类。
我正在考虑在构造函数中使用 enum 或 bool ,但对我来说感觉“错误”(以及我可能这样做的方式)。我可以为二进制和文本使用不同的类名,并且两者都继承基本实现(或其他实现),即使唯一的区别是构造函数。
在 C++ 中这样做最惯用的方法是什么?
Mes*_*kon 10
添加标志
enum class open_mode
{
binary,
text
};
File(const char* filename, open_mode mode);
Run Code Online (Sandbox Code Playgroud)
或使用标签
struct binary_tag { };
struct text_tag { };
File(const char* filename, binary_tag);
File(const char* filename, text_tag);
Run Code Online (Sandbox Code Playgroud)
两种惯用的方式是工厂函数(没有什么会强制您返回指针)或标记调度(在标准库中使用,例如在 中std::variant)。
// Factory functions
struct File {
static File openText(char const *filename);
static File openBinary(char const *filename);
};
// Tag dispatching
struct open_as_binary_t {} constexpr open_as_binary;
struct open_as_text_t {} constexpr open_as_text;
struct File {
File(char const *filename, open_as_binary_t);
File(char const *filename, open_as_text_t);
};
Run Code Online (Sandbox Code Playgroud)