Я работаю на многоплатформенной кодовой базе, и на одной из платформ sprintf_s
недоступен, но snprintf
существует, поэтому в этом случае решение состоит в том, чтобы иметь строку
#define sprintf_s snprintf
Однако я бы хотел либо автоматически отменить это (или выдать ошибку времени компиляции, чтобы я мог сделать это вручную), если платформа реализует sprintf_s
.
Я нашел нескольковопросы здесь, чтобы определить, есть ли в классе определенная функция-член (или существует перегрузка оператора потока), но нет для такой функции, как sprintf_s
.
(я бы предпочел не использовать ничего экспериментального, ноесли std::experimental::is_detected
является единственным решением, пусть так и будет).
Идеальное решение выглядит примерно так:
if !sprintf exists
#define sprintf_s snprintf
, но что-то вроде следующего также будет приемлемым
static_assert(!sprintf_s_exists, "sprintf_s is now defined");