【发布时间】:2017-12-27 09:56:57
【问题描述】:
我已经声明了两个函数:
template<typename T>
void foo(T& in) { cout << in; }
void foo(bool& b) { cout << "Bool:" << (b ? "True" : "False");}
我这样调用函数:
bool var = false; foo(var);
我知道我可以编写测试代码。但如果这是一个依赖于编译器的选择, 编写测试代码永远不会完全覆盖。
【问题讨论】:
-
我的意思是调用:bool var = false; foo(var);
-
如果它是一个依赖于编译器的选择,你怎么能期望得到一个答案?
-
它不依赖于编译器(除非编译器出错)。如果一个模板和一个 nin-template 匹配得很好,则首选非模板。顺便说一句,您可以使用
out << std::boolalpha << true;将bool格式化为字符串(该标志在重置之前一直有效)。默认情况下,格式为true(或false)。如果确实有必要,可以使用自定义std::numpunct<char>facet 更改字符串。