Одним из самых простых возможных примеров является следующая реализация max
, которая даже не шаблонна для типов.
int maximum(int n)
{
return n;
}
template<typename... Args>
int maximum(int n, Args... args)
{
return max(n, maximum(args...));
}
Только немного сложнее каноническая реализация printf
:
void printf(const char *s)
{
while (*s)
{
if (*s == '%' && *(++s) != '%')
throw "invalid format string: missing arguments";
std::cout << *s++;
}
}
template<typename T, typename... Args>
void printf(const char* s, T value, Args... args)
{
while (*s)
{
if (*s == '%' && *(++s) != '%')
{
std::cout << value;
printf(s, args...); // call even when *s == 0 to detect extra arguments
return;
}
std::cout << *s++;
}
throw "extra arguments provided to printf";
}
Вы на самом деле действительно близки. Это - то, что Вы ищете:
System.getProperty("user.name")
Обычно доступные системные свойства документируются в System.getProperties()
метод.
Поскольку Chris сказал "user.name"
свойство должно получить пользователя, запускающего Ваше приложение.