我正在使用 Boost 1.46 和 Turtle lib 1.2.4 和 Visual Studio Express 2013 的编译器。我有以下类来模拟:
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)
};
我遇到了一堆编译器错误,例如语法错误'operator'等等。但是当我用 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 版本时会出现错误?