gpt4 book ai didi

c++ - 声明具有相同args的两个构造函数的最理想的方法是什么?

转载 作者:行者123 更新时间:2023-12-01 15:04:10 25 4
gpt4 key购买 nike

例如,假设我有一个名为File的类。现在,文件可以二进制或文本形式打开。我的构造函数当前是File(const char*filename)。让我们假设open的实现是完全不同的二进制和文本。我该怎么构造呢?

我考虑过使用静态函数,但是我不想返回指针。我可以传入一个指针,但是我宁愿不允许在没有实际初始化的情况下构造一个类。

我当时在考虑在构造函数中使用枚举或 bool(boolean) 值,但是对我来说(以及我的执行方式)这是“错误的”。我可以为二进制文件和文本使用不同的类名称,并且都可以继承基本实现(或其他实现),即使唯一的区别是构造函数。

在C++中最惯用的方法是什么?

最佳答案

两种惯用的方式是工厂函数(什么都不强制您返回指针)或标签分发(在标准库中使用,例如 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);
};

关于c++ - 声明具有相同args的两个构造函数的最理想的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61887903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com