具有通用格式说明符的Printf

时间:2018-12-14 21:35:25

标签: c++ templates formatting

我已经使用模板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 *

1 个答案:

答案 0 :(得分:2)

printf可变,它取决于您告诉您要打印的内容。据我所知,没有办法告诉它。

您可以使用standard library's streams来解决问题。  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 <<的任何类型一起使用