2013-02-17 88 views
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 

请告诉我正确的语法?

+0

你确定'CPPUNIT_ASSERT_EQUAL_MESSAGE'是一个函数而不是*宏*吗? – phoeagon 2013-02-17 12:29:56

+0

我不确定其实......我怎么知道? – 2013-02-17 13:16:30

回答

3

只需创建一个转发功能:

template<class T> 
inline void _assert(const string& message, T expected, T actual) 
{ CPPUNIT_ASSERT_EQUAL_MESSAGE(message, expected, actual); } 
1

简单的放,没有正确的语法,因为作为phoeagon指出,这是一个宏,无功能:

See the reference

1

CPPUNIT_ASSERT_EQUAL_MESSAGE是一个宏而不是一个函数,所以你可以用一个inline函数的实际定义(作为先前的答案建议)或简单地#define一个别名宏来“换行”它:

#define _assert CPPUNIT_ASSERT_EQUAL_MESSAGE 

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