Блог пользователя alvin777

Автор alvin777, 10 лет назад, По-русски

Игрался с C++11 variadic templates, получилось вывести для PR(a, b, s) строку вида "a: 10, b: 5.1, s: asd".

#define PR(...) pr(#__VA_ARGS__, __VA_ARGS__);

template<typename T>
void pr(const string& name, T t) {
    cout << name << ": " << t << endl;
}

template<typename T, typename ... Types>
void pr(const string& names, T t, Types ... rest) {
    auto comma_pos = names.find(',');
    cout << names.substr(0, comma_pos) << ": " << t << ", ";
    
    auto next_name_pos = names.find_first_not_of(" \t\n", comma_pos + 1);
    pr(string(names, next_name_pos), rest ...);
}

int a = 3;
float b = 5.1;
string s = "asd";

PR(a, b, s);

Полный текст и комментарии »

  • Проголосовать: нравится
  • +67
  • Проголосовать: не нравится