Имеется много функций, которые принимают в качестве аргументов указатели на какие-либо данные, которые в теле этой функции, само собой разумеется, необходимо разыменовывать, чтобы добраться до того, на что они, собственно, указывают. Аргументов бывает абсолютно разное кол-во. Делать во всех подобных случаях мне необходимо одно и то же (допустим, писать сообщение в лог об ошибке и делать return из текущей функции).
Писать каждый раз всё это руками — как-то утомительно, а копипастить не хочется (легко забыть добавить ещё одну проверку, а потом целый день потратить на поиски бага).
Захотелось мне придумать что-нибудь наподобие хитрого макроса с переменным числом аргументов, который бы можно было использовать, например, так:
VALIDATE_INPUT_PARAMETERS(first, second);
А он бы сам раскрывался в то, что мне требуется.
Но вот незадача — как это реализовать (даже с учётом Variadic Macros из C99 / C++11) я, к сожалению, не знаю.
На ум приходит лишь решение в виде Variadic макроса, который список аргументов передаёт на вход некоторой функции с переменным числом аргументов, а уже в её теле мы вытаскиваем все аргументы и проверяем их.
Но, я думаю, что жестоко туплю, и более корректное решение данной задачи всё же существует.
Здравствуйте, PlusMyTwitterFace, Вы писали:
PMT>Приветствую.
PMT>Имеется много функций, которые принимают в качестве аргументов указатели на какие-либо данные, которые в теле этой функции, само собой разумеется, необходимо разыменовывать, чтобы добраться до того, на что они, собственно, указывают. Аргументов бывает абсолютно разное кол-во. Делать во всех подобных случаях мне необходимо одно и то же (допустим, писать сообщение в лог об ошибке и делать return из текущей функции).
в с++ существуют функции с переменным количеством аргументов... чем они не подходят?
Здравствуйте, PlusMyTwitterFace, Вы писали:
PMT>Приветствую.
PMT>Имеется много функций, которые принимают в качестве аргументов указатели на какие-либо данные, которые в теле этой функции, само собой разумеется, необходимо разыменовывать, чтобы добраться до того, на что они, собственно, указывают. Аргументов бывает абсолютно разное кол-во. Делать во всех подобных случаях мне необходимо одно и то же (допустим, писать сообщение в лог об ошибке и делать return из текущей функции).
PMT>Писать каждый раз всё это руками — как-то утомительно, а копипастить не хочется (легко забыть добавить ещё одну проверку, а потом целый день потратить на поиски бага).
PMT>Захотелось мне придумать что-нибудь наподобие хитрого макроса с переменным числом аргументов, который бы можно было использовать, например, так:
PMT>
PMT>А он бы сам раскрывался в то, что мне требуется.
PMT>Но вот незадача — как это реализовать (даже с учётом Variadic Macros из C99 / C++11) я, к сожалению, не знаю.
PMT>Но, я думаю, что жестоко туплю, и более корректное решение данной задачи всё же существует.
Сушествует — не выполнять таких проверок внутри функций. Бессмысленная трата процессорных циклов. Я еще понимаю дебаговый ассерт (хотя тоже не считаю его нужным). А продакшн-return — это ересь.
PMT>Имеется много функций, которые принимают в качестве аргументов указатели на какие-либо данные, которые в теле этой функции, само собой разумеется, необходимо разыменовывать, чтобы добраться до того, на что они, собственно, указывают. Аргументов бывает абсолютно разное кол-во. Делать во всех подобных случаях мне необходимо одно и то же (допустим, писать сообщение в лог об ошибке и делать return из текущей функции).