Printf с общим спецификатором формата - PullRequest
0 голосов
/ 15 декабря 2018

Я создал класс c ++ с использованием шаблона t Я хотел бы знать, есть ли какой-либо спецификатор формата, который может печатать или приводить любое значение к его формату

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, чтобы можно было печатать также строки или символы *

1 Ответ

0 голосов
/ 15 декабря 2018

Поскольку 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 <<

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...