Hippomocks — функция пересмешки с переменным количеством аргументов

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

Мой код

void Verbose(LPCTSTR pszFormat, ...);
void Verbose(int level, LPCTSTR pszFormat, ...);
vlevel Verbose(vlevel level, LPCTSTR pszFormat, ...);

Я пытаюсь этот код

TEST_F(VerboseTests, test)
{
MockRepository mocks;
mocks.OnCallFuncOverload((void(*)(int,LPCTSTR,...))Verbose);
}

Выход компилятора:

hippomocks/hippomocks.h:3241:103: error: invalid conversion from ‘void (*)(int, LPCTSTR, ...) {aka void (*)(int, const char*, ...)}’ to ‘void (*)(int, const char*)’ [-fpermissive]
#define OnCallFuncOverload(func) RegisterExpect_<__LINE__>(func, HM_NS Any, #func,  __FILE__, __LINE__)

1

Решение

Это работает. Вы должны убедить компилятор с помощью typedef:

int Verbose(int level, ...)
{
return level;
}

typedef int (*va_func)(int level, const char* p1, int p2);

TEST(check_VA_func)
{
MockRepository mocks;

mocks.ExpectCallFuncOverload((va_func)Verbose).Return(22);

int result = Verbose(3,"Hi",9);

CHECK(result == 22);

}

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]