2013-02-17 83 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 

在這兩者中,我會選擇包裝函數方法,以便它可以在名稱空間中聲明並避免命名衝突。