为函数创建别名

时间:2013-02-17 12:25:16

标签: c++ visual-c++

我想为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

什么是正确的语法?

3 个答案:

答案 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所说,那是一个宏,没有函数:

See the reference

答案 2 :(得分:1)

CPPUNIT_ASSERT_EQUAL_MESSAGE是一个宏,而不是一个函数,因此您可以使用inline函数的实际定义(作为之前的建议答案)“封装”它,或者只是{{1}别名宏:

#define

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