Variadic Templatesの解説ではよく型安全なprintfが例に出されるのでここでも紹介しておこう
void printf(const char* s) { while (*s) { if (*s == '%' && *++s != '%') throw std::runtime_error("invalid format string: missing arguments"); std::cout << *s++; } } template <typename T, typename... Args> void printf(const char* s, const T& value, const Args&... args) { while (*s) { if (*s == '%' && *++s != '%') { std::cout << value; return printf(++s, args...); } std::cout << *s++; } throw std::runtime_error("extra arguments provided to printf"); }
#include <iostream> #include <string> using namespace std; int main() { string name = "Akira"; int age = 22; printf("%s,%d\n", name, age); return 0; }
%03dとかできねーじゃん!っていう突っ込みはなしでおねがいします