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

簡単に言えば、正しい構文はありません。なぜなら、フェーゴンが指摘したように、それはマクロであり、関数ではないからです。

リファレンスを参照してください

于 2013-02-17T12:32:52.357 に答える
1

CPPUNIT_ASSERT_EQUAL_MESSAGEinlineはマクロであり、関数ではないため、関数の実際の定義(前の回答で提案されているように)または単に#defineエイリアスマクロで「ラップ」することができます。

#define _assert CPPUNIT_ASSERT_EQUAL_MESSAGE

2つのうち、名前空間で宣言できるように、また名前の競合を避けるために、ラッパー関数メソッドを選択します。

于 2013-02-17T12:40:16.950 に答える