0

我想为CPPUNIT_ASSERT_EQUAL_MESSAGE(string message, T expected, T actual). 我试过了:

template<class T> void (&_assert)(string, T, T) = &CPPUNIT_ASSERT_EQUAL_MESSAGE;

不确定它是否正确,但我收到了类似的错误

Error   1   error C2530: '_assert' : references must be initialized h:\dropbox\sch\cs3202\code\test\testqueryevaluator\testgetcandidatelist.h   22
Error   2   error C2998: 'void (__cdecl &__cdecl _assert)(std::string,T,T)' : cannot be a template definition   h:\dropbox\sch\cs3202\code\test\testqueryevaluator\testgetcandidatelist.h   22

什么是正确的语法?

4

3 回答 3

3

只需创建一个转发功能:

template<class T> 
inline void _assert(const string& message, T expected, T actual) 
{ CPPUNIT_ASSERT_EQUAL_MESSAGE(message, expected, actual); }
于 2013-02-17T12:34:10.413 回答
1

简单地说,没有正确的语法,因为正如 phoeagon 所说,那是一个宏,没有函数:

请参阅参考资料

于 2013-02-17T12:32:52.357 回答
1

CPPUNIT_ASSERT_EQUAL_MESSAGE是一个宏而不是一个函数,因此您可以使用inline函数的实际定义“包装”它(如先前的答案所建议的那样),或者只是#define一个别名宏:

#define _assert CPPUNIT_ASSERT_EQUAL_MESSAGE

在这两者中,我会选择包装函数方法,以便可以在命名空间中声明它并避免命名冲突。

于 2013-02-17T12:40:16.950 回答