Ben Tilly <[email protected]> writes:
> I've just come up with a better answer to this question. If I was a
> C/C++ programmer this would have been obvious to me before, and it
> solves a bunch of annoyances for me at once.
>
> #ifndef UTIL_H
> #define UTIL_H
>
> #include <string>
> #include <stdio.h>
> #include <stdarg.h>
>
> std::string stringf(const char * format_str, ...) {
> va_list arg_list;
> char * c_string;
> va_start(arg_list, format_str);
> vasprintf(&c_string, format_str, arg_list);
> std::string answer = std::string(c_string);
> free(c_string);
> va_end(arg_list);
> return answer;
> }
>
> namespace {
> int tests = 0;
>
> int next_test () {
> return ++tests;
> }
>
> int current_test () {
> return tests;
> }
> }
>
> void ok (bool is_ok, const char * description, ...) {
> std::string status
> = stringf("%s %d", is_ok ? "ok" : "not ok", next_test());
#include <sstream>
...
void ok (bool is_ok, const char * description, ...) {
ostringstream oss_status;
oss_status << (is_ok ? "ok " : "not ok ") << next_test();
va_list arg_list;
char * c_string;
va_start(arg_list, description);
vasprintf(&c_string, description, arg_list);
va_end(arg_list);
printf("%s: %s\n", oss_status.str().c_str(), c_string);
free(c_string);
}
- Mike
_______________________________________________
Boston-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/boston-pm