Dan*_*Dan 23 c++ debugging templates metaprogramming
在使用C++模板元编程时,我发现很难弄清楚我的代码有什么问题.可能我不是很擅长理解错误消息,但据我所知,我不能诉诸于打印语句或断点来弄清楚发生了什么.
在尝试找出为什么没有编译的东西时,您可以提供哪些提示或建议,而不仅仅是手动选择代码并希望它来找我?
Mic*_*hel 14
对于STL,至少有一些工具可以输出更人性化的错误消息.请访问http://www.bdsoft.com/tools/stlfilt.html
对于非STL模板,您只需了解错误的含义.在你看了十几次后,你会更容易猜到问题是什么.如果你在这里发布它们,也许有人可以帮助你搞清楚.
在元编程语言中使某些事情变得复杂时,我多次使用 BOOST_MPL_ASSERT 宏,检查元执行的每一步的结果。Boost.MPL 库在这方面非常有用。我建议你尽可能多地使用那里的代码,因为它很可能不会包含错误。
当我不太确定正在使用类的正确专业化时,我倾向于在命名空间中隔离正确的专业化。一旦你确定专业化是有效的,你必须确保它被选中。如果不是,您必须找出选择哪个来代替它。然后我建议使用 Boost.EnableIf 从选择过程中排除这个错误接受的专业化。
最后但并非最不重要的是,STLfilt 非常有用,您可以自己修改它,使其尽可能满足您的需求。
但最重要的是尽量不要到处使用元编程。它很复杂,所以只有在你真正需要的时候才使用它。