Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

как победить sprintf ?

04.06.17 09:33
Re: как победить sprintf ?
 
anly коренной житель
anly
в ответ Murr_0002 03.06.17 19:58, Последний раз изменено 04.06.17 09:50 (anly)
взяв имплементацию спринтf() из какой-нибудь библиотеки и добавив контроль типов получишь что надо
а как добавить контроль типов?


На мой взгляд, добавить контроль типов возможно только написав совершенно новую функцию, т.е. с другими аргументами. Как я и сделал выше, заменив три точки реальными типами.


Решение выше можно слегка улучшить. А именно не делать новое имя sprintf_my, а использовать namespace:


namespace XX

{

template<class T>

void sprintf_s(char* buf, size_t size, const char* format, T t)

{

check_t(t);

::sprintf_s(buf, size, format, t);

}

}

using namespace XX;


это позволит обойтись без переименования каждого вызова в уже существующем коде.

(Правда и недостаток есть: можно забыть сделать #include "my_sprintf.h")

Проклят нарушающий межи ближнего своего (Втор.27:17)
 

Перейти на