- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
上课
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/
我有一个像这样的简单语法 "STRING_LITERAL"(, "STRING_LITERAL")? 在 lexer.g4 中,我这样定义 STRING_LITERAL STRING_LITERAL:
目前,我正在使用这个 ANTLR4 语法(部分)以获得 strings和numbers : 弄清楚这个总结的语法: gramm : expr SCOL ; expr : literal
上课 class A { public: //nested types enum Type {string,boolean}; public: //for simple debug s
我正在尝试从 html 电子邮件的正文中提取 6 个字段Sender、Customer ID 等: $string = '... some other html text ... Sender
在 GCC 4.9.2 中,以下代码无法编译: #include #include using namespace std::literals::string_literals; using na
我是一名优秀的程序员,十分优秀!