Короткий ответ: ты не можешь. Переменный список аргументов не имеет информации о типе. Вот почему для таких функций, как printf
и scanf
требуется строка формата
printf("%s %d\n","here is the magic number",42);
Вам необходимо либо задокументировать, как должна вызываться ваша функция, либо использовать форматную строку, как printf
.
Переменный список аргументов поддерживается в C ++, но не объектно-ориентирован или не безопасен, и есть лучшие альтернативы. Одна из альтернатив C ++ - использовать такую конструкцию, как оператор <<
, как и в случае cout (эквивалент C ++ printf
)
cout << "here is the magic number" << ' ' << 42 << endl;
Вы можете реализовать это для своего собственного класса, как это
class VarArgs
{
public:
VarArgs & operator << (int value)
{
//do something
return *this;
}
VarArgs & operator << (char value)
{
//do something
return *this;
}
VarArgs & operator << (char *value)
{
//do something
return *this;
}
//etc.
};