我想为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
什么是正确的语法?
答案 0 :(得分:3)
只需创建转发功能:
template<class T>
inline void _assert(const string& message, T expected, T actual)
{ CPPUNIT_ASSERT_EQUAL_MESSAGE(message, expected, actual); }
答案 1 :(得分:1)
简单来说,没有正确的语法,因为正如phoeagon所说,那是一个宏,没有函数:
答案 2 :(得分:1)
CPPUNIT_ASSERT_EQUAL_MESSAGE
是一个宏,而不是一个函数,因此您可以使用inline
函数的实际定义(作为之前的建议答案)“封装”它,或者只是{{1}别名宏:
#define
在这两个中,我会选择包装函数方法,因此可以在命名空间中声明它并避免命名冲突。