私は、Turtle lib 1.2.4 と Visual Studio Express 2013 のコンパイラで Boost 1.46 を使用しています。MOCK には次のクラスがあります。
struct IPredicate
{
virtual ~IPredicate() {}
virtual bool operator()(float value) = 0;
};
MOCK_NON_CONST_METHOD で operator() をモックすると:
MOCK_BASE_CLASS(MockPredicate, IPredicate)
{
MOCK_NON_CONST_METHOD(operator(), 1, bool(float), id)
};
構文エラー「演算子」などのコンパイラエラーがたくさんありました。しかし、MOCK_NON_CONST_METHOD_EXT でモックすると:
MOCK_BASE_CLASS(MockPredicate, IPredicate)
{
MOCK_NON_CONST_METHOD_EXT(operator(), 1, bool(float), id)
};
すべてが問題なく、完全に機能します。http://turtle.sourceforge.net/turtle/reference.htmlによると、EXT 接尾辞が付いた MOCKS は「可変引数マクロをサポートしていないコンパイラ」用ですが、私が使用しているものはサポートされています (これらの例で確認してください: http:/ /msdn.microsoft.com/en-us/library/ms177415.aspx )。ドキュメントの残りの部分は、このケースについてあまり明確ではありません。
ここで何が起こっているのか説明できる人はいますか?EXT サフィックス付きの MOCK バージョンを使用しないとエラーが発生するのはなぜですか?