C++ Visual Studio嵌套宏/模板类调试帮助

C++ Visual Studio嵌套宏/模板类调试帮助,c++,visual-studio,templates,macros,C++,Visual Studio,Templates,Macros,我试图使用VisualStudio2019在windows中构建Goptical包()。它使用DPP库()在visualstudio下构建时抛出错误。带有gcc的Linux构建正如预期的那样顺利,但我需要在带有VisualStudio的windows上实现这一点 这些错误来自委托类,委托类是使用宏进一步包装在内部的嵌套模板类。已尝试调试,但VisualStudio似乎没有精确定位错误的确切位置,而是指向触发错误的最后一行 是否有任何机制可以让我们看到宏定义一步一步地回滚?或者,我们可以检查一个中

我试图使用VisualStudio2019在windows中构建Goptical包()。它使用DPP库()在visualstudio下构建时抛出错误。带有gcc的Linux构建正如预期的那样顺利,但我需要在带有VisualStudio的windows上实现这一点

这些错误来自委托类,委托类是使用宏进一步包装在内部的嵌套模板类。已尝试调试,但VisualStudio似乎没有精确定位错误的确切位置,而是指向触发错误的最后一行

是否有任何机制可以让我们看到宏定义一步一步地回滚?或者,我们可以检查一个中间输出来一步一步地调试它?在下面发布违规代码和错误详细信息:

1> delegate(578,1): error C2059: syntax error: ','
1> delegate(578): message : see reference to class template instantiation 'dpp::delegate_bind<base,R(void),3>' being compiled

我建议您可以在
Properties->C/C++->Preprocessor->preprocesstofile
中设置
Yes
。然后,您可以在项目的debug floder中的
XXX.i
文件中看到宏定义。


我经常发现,在处理宏问题时,有一点很有帮助,那就是进入C/C++->“预处理器”页面上的项目属性,并将“预处理到文件”设置为“是”。然后我可以检查编译器试图使用的实际代码。MSVC和gcc/clang对变量宏的处理不同,这总是导致某些预处理器元编程库出现错误。但遗憾的是,似乎没有什么可以让MSVC像gcc/clang那样做。因此,作者应该始终在MSVC中提供不同的实现,就像boost所做的一样。
#if DPP_DELEGATE_ARGC >= 2
  _DPP_DELEGATE(2)
  _DPP_DELEGATE_FUNC(2)
  _DPP_DELEGATE_MEMBER(2)
  _DPP_DELEGATE_MEMBER_THIS(2)
  _DPP_DELEGATE_BIND(1, 1, 1, _DPP_DELEGATE_BTDEFS(1, 0), _a0, a0);
  _DPP_DELEGATE_BIND(2, 1, 1, _DPP_DELEGATE_BTDEFS(1, 1), a0, _a0);
  _DPP_DELEGATE_BIND(3, 0, 2, _DPP_DELEGATE_BTDEFS(2, 0, 1), _a0, _a1);
#endif