【发布时间】:2014-01-29 09:21:20
【问题描述】:
我正在使用带有 Turtle lib 1.2.4 的 Boost 1.46 和 Visual Studio Express 2013 的编译器。我对 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)
};
我遇到了一堆编译器错误,例如语法错误 '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版本会报错?
【问题讨论】:
标签: c++ boost visual-studio-2013 compiler-construction turtle-mock