首页 > 解决方案 > 带有通用格式说明符的 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*

标签: c++templatesformatting

解决方案


由于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 <<


推荐阅读