Как дать класс в качестве допустимого параметра для printf, где он возвращает в виде строки? - PullRequest
0 голосов
/ 24 декабря 2011

У меня есть класс, и я хочу, чтобы, когда я указываю его в качестве параметра для printf / sprintf, он использовался как конкретная строка (в зависимости от того, что происходит в классе).Возможно ли что-то подобное?

printf("blah blah  %s  ", customclass);

Что мне нужно сделать, чтобы это происходило без какого-либо преобразования типов и без какого-либо необходимого вызова функции, например customclass.xyz ()?

Ответы [ 2 ]

4 голосов
/ 24 декабря 2011

printf - это функция с переменным числом аргументов, которая не может использоваться любым разумным образом с пользовательскими типами.

Если вы находитесь в C ++, вам следует предпочесть потоки (например, std::cout), а не printf именно по такой причине.С помощью потоков вы можете перегрузить оператор <<:

class CustomClass
{
public:
    int x;
    int y;
};

ostream &operator<<(ostream &os, CustomClass c)
{
    os << "{" << c.x << "," << c.y << "}";
    return os;
}

...

CustomClass customclass;
customclass.x = 5;
customclass.y = 7;
std::cout << customclass << "\n";
0 голосов
/ 24 декабря 2011

Я думаю, что это сработает.

cout << "blah blah " << typeid(customclassobject OR customclass).name() << endl;

ОБНОВЛЕНИЕ: Если вы хотите напечатать членов класса (что-то похожее на toString () в Java, тогда ответ Оли Чарльзворта верен.

...