Mój kod zawiera fragmenty, takie jak:SBRM/RAII dla std :: va_list/va_start()/va_end używać
std::va_list ap;
va_start(ap, msgfmt);
snprintf_buf buf;
const tchar * msg = buf.print_va_list(msgfmt, ap);
va_end(ap);
Są krótkie i va_start()
i va_end()
są blisko siebie, więc nie są one wielkim problemem . Wyjątki od połączeń pomiędzy nimi mogą być problemem (lub nie?).
Prosty test pokazuje, że wywoływanie va_start()
z funkcji bez wielokropka jest niedozwolone. Czy wywołanie va_end()
z innej funkcji niż va_start()
zostało wywołane z dozwolonej, czy nie?
Zasadniczo, jestem ciekawy, czy możliwe jest, aby użyć idiomu SBRM/RAII dla tych połączeń, nawet jeśli to było konieczne, aby zadzwonić va_start()
ręcznie, a następnie przekazać instancję std::va_list
do mojego RAII/SBRM przykład straży?
Gdzie jest cytat? – wilx
@wilx: Standard C99, 7.15.1/1. –