Приветствую.
Имеется много функций, которые принимают в качестве аргументов указатели на какие-либо данные, которые в теле этой функции, само собой разумеется, необходимо разыменовывать, чтобы добраться до того, на что они, собственно, указывают. Аргументов бывает абсолютно разное кол-во. Делать во всех подобных случаях мне необходимо одно и то же (допустим, писать сообщение в лог об ошибке и делать return из текущей функции).
Например:
void foo(int* first)
{
if (!first)
{
std::cerr << "Error \n";
return;
}
}
void bar(int* first, int* second)
{
if (!first || !second)
{
std::cerr << "Error \n";
return;
}
}
И т.д.
Писать каждый раз всё это руками — как-то утомительно, а копипастить не хочется (легко забыть добавить ещё одну проверку, а потом целый день потратить на поиски бага).
Захотелось мне придумать что-нибудь наподобие хитрого макроса с переменным числом аргументов, который бы можно было использовать, например, так:
VALIDATE_INPUT_PARAMETERS(first, second);
А он бы сам раскрывался в то, что мне требуется.
Но вот незадача — как это реализовать (даже с учётом Variadic Macros из C99 / C++11) я, к сожалению, не знаю.
На ум приходит лишь решение в виде Variadic макроса, который список аргументов передаёт на вход некоторой функции с переменным числом аргументов, а уже в её теле мы вытаскиваем все аргументы и проверяем их.
Но, я думаю, что жестоко туплю, и более корректное решение данной задачи всё же существует.