c++ - 带有通用格式说明符的 Printf
问题描述
我已经使用模板 t 创建了一个 c++ 类我想知道是否有任何格式说明符可以打印或将任何值转换为它的格式
template <typename T>
void AssertAreEqual(T t_Expected,T t_Actual, int line){
if (t_Expected != t_Actual)
printf("FAIL - Line < %d > - Expected value does not match with expected\tExpected: < %d > Actual < %d >\n",line,t_Expected,t_Actual);
}
例如:我想要一个全局或通用格式说明符而不是 %d 以便能够打印字符串或 char*
解决方案
由于printf
是可变参数,它依赖于你告诉它你想打印什么。据我所知,没有办法告诉它弄清楚。
您可以通过使用标准库的流来解决问题。operator <<
为所有内置类型重载,将为您选择正确的重载。您可以将代码更改为
template <typename T>
void AssertAreEqual(T t_Expected,T t_Actual, int line){
if (t_Expected != t_Actual)
std::cerr << "FAIL - Line < " << line << " > - Expected value does not match with expected\tExpected: < " << t_Expected << " > Actual < " t_Actual << " >\n";
}
这也允许代码使用任何提供operator !=
和operator <<
推荐阅读
- rest - 通过调用 rest-api 更新 tfs 的 wiki 页面
- excel - 谷歌脚本发送带有图像的excel附件
- php - 图片方向手机上传
- cordova - 是否可以将 Cordova 插件用于本机应用程序 WKWebView?
- javascript - 可以忽略 AngularJS v1.4.5 的 jquery-2.2.4 JQMIGRATE 警告并升级 AngularJS 吗?
- excel - 是否有在 excel vba 消息框中使用 vba 语法来强制用户单击“确定”或关闭 excel?
- android - 如何从笑脸评级栏获取当前选择?
- c - 如何使用 MinGW 使用 ssl 编译 libcurl
- php - 我怎样才能让这个 Php WP_Query 只返回一次类别?
- r - 忽略不符合条件的值,按条件按组密集排名或编号