问题标签 [boost-extension]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
699 浏览

c++ - Boost如何为类型选择创建地图?

所以我使用 BOOST.EXTENTION来加载模块。我有一个描述每个模块的特殊文件。我从该文件中读取变量。

所以这样的例子:

对我来说会变成:

如何创建这样的地图来映射标准和服装类型?

更新:

可能有变体

能停下来吗?所以只要我们想要的所有类型都在其中声明,我们就不会关心?

0 投票
1 回答
72 浏览

c++ - 地图领取方式& 来自函数/类?

如何map<string, factory<BaseClass, ConstructorType> >从这样的功能中接收?

所以我有

我尝试通过以下方式获得它的价值:

我尝试为自己概括/简化一些 boost.extension 方法。

那么如何map<A, B>&正确接收呢?

如何正确初始化链接或如何返回不是链接而是真实对象?(对不起 C++ nube)

0 投票
1 回答
144 浏览

c++ - 创建引用与创建对象之间的主要区别是什么?

所以前段时间我在玩 Boost.Extension 例子。他们用

但是当我开始将项目从 bjam 移植到 premake 到 Visual Studio Project 2008时,我发现我不能使用他们用于创建地图的方法。我总是在那一行得到编译器错误 C2512(实际上在Boost.Extension type_map.hpp 内的第 74 行)。所以我使用了创建地图链接的方法

(他们在一些教程中使用过)并且全部编译。我对 C++ 很陌生,可能不太了解。

那么在这种情况下和一般情况下,从链接创建地图与简单创建地图有什么区别?

更新 - 完整的错误消息

错误 1 ​​错误 C2512: boost::extensions::basic_type_map::type_map_convertible::type_holder: 没有合适的默认构造函数可用 c:\users\avesta\downloads\extension-svn-source\boost\extension\type_map.hpp 74 Mltiple-Inheritance

0 投票
2 回答
3095 浏览

c++ - Boost.Extension - 简单的继承示例 - 为什么我们在 linux 上看不到动物?

所以我尝试为 linux 移植一些 Boost.Extension 示例

该示例在此处进行了描述。这是我的代码移植(带有动物的类动物原型主应用程序、一般所有移植的想法都在这里描述,以及一些当前的 linux 进展在这里(一些示例确实可以根据需要工作!))。当我在它编译的 linux 下编译这个示例时,它会找到带有动物的库,但输出:

这只会发生if(factories.empty())

我尝试将扩展示例移植到跨平台基础上 - 所以我在 Windows 下尝试了相同的代码 - 就像一个魅力!查找所有动物和输出:

那么......为什么它在具有相同代码的linux上表现如此?为什么它在 Windows 下运行得这么好?

更新:

那么如何使用 premake 构建这些东西:

  1. 你从这里得到svn(只需要这个文件夹)
  2. 可以为您的平台获取 premake 或从源代码构建它并将其放入您从 svn 下载的文件夹中
  3. 您应该已经编译并安装了官方的 Boost(请阅读我们在目录中提供的 ReadMe.txt 文件),所以需要什么:
    • Boost C++ 库 (我们测试了 1.4.16 版)
    • Boost-Extension(我们使用最新版本,我们将其作为 boost 'boost/extension/ **' 的一部分进行处理,我们必须制作一些 chandes(实际上只有一个)来提升扩展,所以我们在Boost.Extension.Tutorial/libs/boost/extension/文件夹中提供它,所以当你下载 svn 时你得到了它,它只是标题
    • Boost-Reflection(我们使用它是因为本教程,我们使用最新版本,我们将它作为 boost 'boost/reflection/ **' 的一部分来处理 *为了简单起见,我们建议将其放入Boost.Extension.Tutorial/libs/boost/reflection*
  4. 现在,当官方 Boost 在您的系统中时,文件夹中只有头文件 Boost-reflection 和 Boost-extension Boost.Extension.Tutorial/libs/boost,premake4 可执行文件在Boost.Extension.Tutorial/文件夹中,我们可以简单地调用Boost.Extension.Tutorial/ premake4-build-windows.batwindows 来获取 Visual Studio 的 sln 或 Boost.Extension.Tutorial/ premake-build.sh获取 makefile。
  5. 您可以在生成的项目文件夹中找到生成的解决方案/makefile。
  6. 祝你好运!=)

更新 2:

Windows 和 Linux 的项目文件现在在 svn 中,因此您可以使用 premake 进行项目创建 - 只有 Boost、我们的 svn 和反射头文件 lib。

0 投票
1 回答
830 浏览

c++ - Boost-Extension-Reflection 不使用 bjam 编译官方示例时如何修复分段错误错误?

因此,我尝试为标准 IDE 移植一些 Boost.Extension 示例 - 使 tham 从 BJAM 中解放出来,并能够以跨平台的标准方式使用它们

此处描述了我现在遇到的问题的示例。这是我的代码端口(我们尝试在主代码文件中加载的库主应用程序,一般所有端口的想法都在这里描述,以及一些当前的 linux 进展在这里(大多数示例确实根据需要工作!))。当我在 linux 下编译此示例时,它会编译,它会找到库,但在执行期间因 分段错误错误而失败。当我在 Windows 上编译它时,会发生同样的事情。

我已尽力不更改原始教程代码

那么代码有什么问题,为什么如果失败,唯一重要的是 - 如何修复它?

那么如何使用 premake 构建这些东西:

  1. 你从这里得到svn(只需要这个文件夹)
  2. 可以为您的平台获取 premake 或从源代码构建它并将其放入您从 svn 下载的文件夹中
  3. 您应该已经编译并安装了官方的 Boost(请阅读我们在目录中提供的 ReadMe.txt 文件),所以需要什么:
    • Boost C++ 库 (我们测试了 1.4.16 版)
    • Boost-Extension(我们使用最新版本,我们将其作为 boost 'boost/extension/ **' 的一部分进行处理,我们必须制作一些 chandes(实际上只有一个)来提升扩展,所以我们在Boost.Extension.Tutorial/libs/boost/extension/文件夹中提供它,所以当你下载 svn 时你得到了它,它只是标题
    • Boost-Reflection(我们使用它是因为本教程,我们使用最新版本,我们将它作为 boost 'boost/reflection/ **' 的一部分来处理 *为了简单起见,我们建议将其放入Boost.Extension.Tutorial/libs/boost/reflection*
  4. 现在,当官方 Boost 在您的系统中时,文件夹中只有头文件 Boost-reflection 和 Boost-extension Boost.Extension.Tutorial/libs/boost,premake4 可执行文件在Boost.Extension.Tutorial/文件夹中,我们可以简单地调用Boost.Extension.Tutorial/ premake4-build-windows.batwindows 来获取 Visual Studio 的 sln 或 Boost.Extension.Tutorial/ premake-build.sh获取 makefile。
  5. 您可以在生成的项目文件夹中找到生成的解决方案/makefile。
  6. 祝你好运!=)

更新:

Windows 和 Linux 的项目文件现在在 svn 中,因此您可以使用 premake 进行项目创建 - 只有 Boost、我们的 svn 和反射头文件 lib。

更新 2: 所以通常我的电脑在 Windows 和 Linux 上都出现问题。我的 Linux 的详细信息(这是一个 openSUSE 11.3 VMWare 映像,其中包括 Mono 2.10.2)GCC(gcc -v):

我的 Windows 是标准的 Windows 7,带有 Visual Studio Team System 2008 Team Suite。

我的 boost 是从这里手动编译和安装的 1.46.1下载。

0 投票
1 回答
382 浏览

c++ - 花括号如何在 Boost::extension 中工作,如何自己制作这样的宏?

我看看我们如何使用 Boost::ExtensionBOOST_EXTENSION_TYPE_MAP_FUNCTION宏。

例如像这样

BOOST_EXTENSION_TYPE_MAP_FUNCTION宏在extension.hpp中定义。

我想知道这个宏如何理解花括号中的内容,以及如何将这个宏扩展为类似“Hello 扩展宏”之类的东西?

0 投票
0 回答
66 浏览

c++ - 有没有办法将运行时程序克隆到另一台服务器

假设我在服务器上运行一个小程序。例如,随机数生成器并每秒将结果发送给客户端。我知道我的服务器即将关闭。有没有办法将程序克隆到另一台服务器,以便客户端不会注意到它?

理想情况下,我想保存小程序的动态对象,将其发送到另一台服务器并使用动态链接将其与另一台服务器重新链接。如果这是可能的,那么问题是如何保存/休眠那个小程序。

另一个明显的解决方案是将项目的所有状态序列化并将其发送到另一台服务器,但这将涉及更改小程序,这是不可取的。

我什至不确定要搜索什么关键字。

(如果可能的话,我想避免系统调用。如果没有,那很好。)

更新(1) 默认平台是linux,但我也对嵌入式系统和nacl感兴趣

0 投票
1 回答
595 浏览

c++ - [Boost::ext].SML:在操作中访问 SM 和依赖项

我正在使用 SML ( https://boost-ext.github.io/sml/ ) v.1.1.3,我需要访问注入的依赖项和操作中的状态机。根据以下提交,这应该已经起作用:https ://github.com/boost-ext/sml/commit/e6d0685993a8a0160dde1610d7f8be4f811c89d0 此提交是此问题的结果: https ://github.com/boost-ext/sml/问题/94

在接下来的示例中,我尝试在 action2 中访问依赖项和 sm,但出现编译错误:... sml.hpp:1853:18: note: cannot convert 'deps' (type 'boost::ext:: sml::v1_1_3::aux::pool<int, {anonymous}::actions_guards&, {anonymous}::actions_guards>') 输入 'int&' 1853 | 返回对象(事件、sm、deps、subs);

例子:

错误:... sml.hpp:1340:10: 来自 'bool boost::ext::sml::v1_1_3::back::sm_impl< >::process_event(const TEvent&, TDeps&, TSubs&) [with TEvent = {匿名}::e2; TDeps = boost::ext::sml::v1_1_3::aux::pool<int, {anonymous}::actions_guards&, {anonymous}::actions_guards>; TSubs = boost::ext::sml::v1_1_3::aux::poolboost::ext::sml::v1_1_3::back::sm_impl<boost::ext::sml::v1_1_3::back::sm_policy <{匿名}::actions_guards >>; TSM = boost::ext::sml::v1_1_3::back::sm_policy<{anonymous}::actions_guards>]' /usr/local/oecore-x86_64_tux_dunfell/sysroots/armv5te-angstrom-linux-gnueabi/usr/include /boost/sml.hpp:1660:81: 来自 'bool boost::ext::sml::v1_1_3::back::sm< >::process_event(const TEvent&) [with TEvent = {anonymous}::e2 ; 类型名 boost::ext::sml::v1_1_3::aux::enable_if<boost: :ext::sml::v1_1_3::aux::integral_constant<bool, __is_base_of(TEvent, boost::ext::sml::v1_1_3::back::sm::events_ids)>::value, int>::类型 = 0; TSM = boost::ext::sml::v1_1_3::back::sm_policy<{anonymous}::actions_guards>]' main.cpp:86:23: 这里需要 /usr/local/oecore-x86_64_tux_dunfell/sysroots/ armv5te-angstrom-linux-gnueabi/usr/include/boost/sml.hpp:1853:18:错误:不匹配调用'(boost::ext::sml::v1_1_3::aux::zero_wrapper<{anonymous }::<lambda(const auto:3&, auto:4&, int&, std::string&)>, void>) (const {匿名}::e2&, boost::ext::sml::v1_1_3::back: :sm_implboost::ext::sml::v1_1_3::back::sm_policy<{anonymous}::actions_guards >&, boost::ext::sml::v1_1_3::aux::pool<int, {anonymous}: :actions_guards&, {匿名}::actions_guards>&, boost::ext::sml::v1_1_3::aux:: poolboost::ext::sml::v1_1_3::back::sm_impl<boost::ext::sml::v1_1_3::back::sm_policy<{anonymous}::actions_guards > >&)' 1853 | 返回对象(事件、sm、deps、subs);| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~ main.cpp:37:16: 注意: 候选: 'template<class auto:3, class auto:4> {匿名}::<lambda(const auto:3&, auto:4&, int&, std::string&)>' 37 | auto action2 = [](const auto& event, auto& sm, int& i, std::string& str) { | ^ main.cpp:37:16:注意:模板参数推导/替换失败:在 main.cpp:20 包含的文件中:/usr/local/oecore-x86_64_tux_dunfell/sysroots/armv5te-angstrom-linux-gnueabi/usr/include /boost/sml.hpp:1853:18:注意:无法转换 'deps'(类型 'boost::ext::sml::v1_1_3::aux::pool<int, {anonymous}::actions_guards&, {anonymous} :: actions_guards>') 输入 'int&' 1853 | 返回对象(事件、sm、deps、subs);| ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~