gpt4 book ai didi

c++ - "string_literal"当编译器选择函数的重载版本时,解析为 bool 而不是 std::string

转载 作者:行者123 更新时间:2023-11-30 02:33:35 25 4
gpt4 key购买 nike

上课

class A {
public: //nested types
enum Type {string,boolean};
public: //for simple debug
std::string name_;
enum Type type_;
bool boo_;
std::string str_;
public:
A(const std::string &name, const std::string &s) :
name_(name), type_(Type::string), str_(s) {}
A(const std::string &name, const bool &b) :
name_(name), type_(Type::boolean), boo_(b) {}

并且在构造值为“world”的类时,它被解析为 bool 值,显然我应该指定 std::string

int main()
{
A a("hello","world");
cout << "a.type_: " << (a.type_ == A::Type::string ? "string" : "boolean") << endl;
a = A("hello",std::string{"world"});
cout << "a.type_: " << (a.type_ == A::Type::boolean ? "string" : "boolean") << endl;
}

所以我需要为 const char* 重载类构造函数。

    A(const std::string &name, const char *s) : 
name_(name), type_(Type::string), str_(s) {}

还有其他好的解决方案吗?

更新。 可运行 here .它包含我和 Sam Varshavchik 的 2 个解决方案。取消注释其中 1 个以获得结果。

最佳答案

不幸的是,没有“好的解决方案”。 C++ 没有“好”的名声。

您在这里可以做的最好的事情是使用嵌套构造函数,这样至少您不必做构造函数必须做的任何额外工作:

A(const std::string &name, const char *s)
: A(name, std::string(s))
{
}

然后,如果您实际的构造函数在这里需要做的任何工作都没有显示(尽管您没有完全显示 Minimal, Complete, and Verifiable Example ,您的努力已经足够好了),就不会有任何额外的代码重复。

转念一想,这可能是您正在寻找的“不错”的解决方案。可以说这正是嵌套构造函数的用途。

关于c++ - "string_literal"当编译器选择函数的重载版本时,解析为 bool 而不是 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35247364/

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