【发布时间】:2018-04-25 07:38:02
【问题描述】:
我正在尝试通过使用 boost MSM 状态机的显式模板实例化来减少项目的编译时间。但是,每当我添加显式模板实例化时,我的项目都不会编译。
您可以使用以下文档中的示例找到问题示例:http://coliru.stacked-crooked.com/a/9850cae23afdada2。 (这是一个人为的例子,因为只有一个翻译单元,但错误与我在项目中使用显式模板实例化时的错误相同。)
有人知道如何解决这些编译错误吗?
/usr/local/include/boost/msm/back/state_machine.hpp: In instantiation of 'boost::msm::back::state_machine<A0, A1, A2, A3, A4>::deferred_events_queue_t& boost::msm::back::state_machine<A0, A1, A2, A3, A4>::get_deferred_queue() [with A0 = player_; A1 = boost::parameter::void_; A2 = boost::parameter::void_; A3 = boost::parameter::void_; A4 = boost::parameter::void_; boost::msm::back::state_machine<A0, A1, A2, A3, A4>::deferred_events_queue_t = std::deque<std::pair<boost::function<boost::msm::back::HandledEnum()>, bool>, std::allocator<std::pair<boost::function<boost::msm::back::HandledEnum()>, bool> > >]':
main.cpp:271:27: required from here
/usr/local/include/boost/msm/back/state_machine.hpp:1346:40: error: 'struct boost::msm::back::state_machine<player_>::deferred_msg_queue_helper<boost::msm::back::state_machine<player_>, int>' has no member named 'm_deferred_events_queue'
return m_deferred_events_queue.m_deferred_events_queue;
~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
...
【问题讨论】:
-
您是否已经将文档中的建议应用到您的项目中?对我来说,模板实例化路线看起来像是一个微优化。 boost.org/doc/libs/1_67_0/libs/msm/doc/HTML/…
-
@AlessandroTeruzzi 我考虑过模板实例化,因为我在测试中使用 FSM,并且在每个 TU 中都会重新编译它。我的目标是在测试(以及项目源代码)中使用 extern 模板类,并且只有一个特定的文件用于实例化,以便只编译一次。
-
@AlessandroTeruzzi 我尝试使用喜爱编译时间策略,但正如我所料,影响不大。也许我应该尝试将我的 FSM 拆分成更小的部分。