我想创建一组方法,这些方法将根据其类型输出具有特殊格式的值。当我这样做时,到目前为止它看起来非常好:
static void printValue(std::ostringstream& out, int value) {
out << value;
}
static void printValue(std::ostringstream& out, double value) {
out << value;
}
static void printValue(std::ostringstream& out, const std::string& value) {
out << "\"" << escapeString(value) << "\"";
}
测试:
printValue(std::cout, 123); // => 123
printValue(std::cout, 3.14); // => 3.14
printValue(std::cout, "foo"); // => "foo"
但是,只要我添加 bool
重载:
static void printValue(std::ostringstream& out, bool value) {
out << (value ? "true" : "false");
}
...事情坏了,因为添加字符串调用似乎默认使用基于bool
的重载:
printValue(std::cout, 123); // => 123
printValue(std::cout, 3.14); // => 3.14
printValue(std::cout, true); // => true
printValue(std::cout, "foo"); // => true <= !!!
有什么方法可以避免这种自动强制转换为 bool 值并强制编译器为字符串选择正确的方法吗?
最佳答案
您可以添加一个模板重载,它引用大小为 N
的 char
数组,其中 N
是模板参数,和/或接受 const char*
的。
template <std::size_t N>
static void printValue(sts::ostringstream& out, const char (&str)[N])
{
out << str;
}
关于C++:避免在重载中将字符串自动转换为 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53709105/