Макросы и проверка аргументов
От: PlusMyTwitterFace  
Дата: 30.07.12 19:41
Оценка:
Приветствую.

Имеется много функций, которые принимают в качестве аргументов указатели на какие-либо данные, которые в теле этой функции, само собой разумеется, необходимо разыменовывать, чтобы добраться до того, на что они, собственно, указывают. Аргументов бывает абсолютно разное кол-во. Делать во всех подобных случаях мне необходимо одно и то же (допустим, писать сообщение в лог об ошибке и делать 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 макроса, который список аргументов передаёт на вход некоторой функции с переменным числом аргументов, а уже в её теле мы вытаскиваем все аргументы и проверяем их.

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