Фон
Я пишу приложение Магазина Windows на С++, используя проект модульного тестирования Магазина Windows. Пытаясь выяснить, как проверить, было ли возбуждено исключение, я нашел Assert::ExpectedException в CppUnitTestAssert.h. Его подписи ниже:
template<typename _EXPECTEDEXCEPTION, typename _RETURNTYPE> static void ExpectException(_RETURNTYPE (*func)(), const wchar_t* message = NULL, const __LineInfo* pLineInfo = NULL)
{
...
}
а также
template<typename _EXPECTEDEXCEPTION, typename _FUNCTOR> static void ExpectException(_FUNCTOR functor, const wchar_t* message = NULL, const __LineInfo* pLineInfo = NULL)`
{
...
}
Вопрос:
Прошло много времени с тех пор, как я кодировал на С++, поэтому мне трудно понять, как правильно вызвать метод. Я продолжаю получать следующую ошибку:
'Microsoft::VisualStudio::CppUnitTestFramework::Assert::ExpectException' : none of the 2 overloads could convert all the argument types
Я понимаю, что на самом деле это может быть неправильное понимание «чистого» С++, но я не уверен, что в С++/CX могут быть другие правила использования указателей функций, чем в С++. Или, по крайней мере, то, что я помню о правилах.
РЕДАКТИРОВАТЬ:
Я пытаюсь использовать перегрузку указателя функции, _RETURNTYPE (*func)(), а не перегрузку __FUNCTOR. Вот код, который не компилируется.
Assert::ExpectException<InvalidArgumentException, int>(&TestClass::TestMethod);
Вот метод тестирования:
void TestMethod()
{
}