【问题标题】:Using enums with Pococapsule (C++ IoC-container)将枚举与 Pococapsule 一起使用(C++ IoC 容器)
【发布时间】:2010-12-31 14:58:58
【问题描述】:

有没有办法在 pococapsule 中提供枚举值作为方法参数而不使用工厂方法?

假设我有一个在其构造函数中采用枚举值的类

class A
{
    A(myEnum val);
}

使用 Pococapsule xml 配置: 我想表达这样的话:

<bean id="A" class="A">
    <method-arg type="MyEnum" value="MyEnum::Value1" />
</bean>

但是,由于 pococapsule 的基本类型仅包括内置类型,例如 short、char 等,这是不可能的。
我将如何使用 pococapsule 实例化 A 类?

我可以使用类似这样的工厂方法:

MyEnum GetMyEnumValue1()
{
    return MyEnum::Value1;
}

<bean id="A" class="A">
    <method-arg factory-method="GetMyEnumValue1" />
</bean>

这不是很实用。我必须为使用的每个枚举的每个可能值实现一个新的工厂方法。

有些人会争辩说 enum:s 不应该在构造函数或 setter 方法中传递,因为它是一个类做了很多事情的标志。是的我同意。但是,有很多第三方代码和 c++ 框架使用这种风格,所以我需要能够做到这一点。


编辑: 该问题已在 Pococapsule 的论坛上解决。在这种特定情况下,解决方法是让工厂方法执行所需的操作。它不像在 xml-config 文件中声明 enum-use 那样灵活,但它推动了项目向前发展。感谢柯的帮助。

【问题讨论】:

    标签: c++ ioc-container poco


    【解决方案1】:

    在 C/C++ 中,枚举可以作为 int 隐式传递,因此,您可以简单地这样做:

    您还可以使用 DSM 功能定义您自己的扩展架构,以支持您的特定枚举(它应该类似于示例/basic-ioc/ext-schema 中的用户示例,其中 DSM 用于类型安全地支持用户定义的 Map类型)。

    -柯

    【讨论】:

    • 感谢Ke Jin 的回复,我试图联系到你,但在PocoCapsule 网站和你的博客上都找不到你的电子邮件。我尝试使用它的真实案例是一个框架,该框架具有重载了几个不同枚举的相同方法。使用您对使用 long 的建议不起作用,因为编译器发现错误的重载方法。如果您有时间,如果您能通过电子邮件与我联系,我将不胜感激:z[at]consoft.se。我觉得这个问题可能太复杂了,在这里讨论解决(找到正确答案后会发布)。
    【解决方案2】:

    (重新发布,因为 XML 代码在之前的回复中被过滤掉了)

    在 C/C++ 中,枚举可以作为 int 隐式传递,因此,您可以在 method-arg 元素中简单地使用 type="long"。

    您还可以使用 DSM 功能定义您自己的扩展架构,以支持您的特定枚举(它应该类似于示例/basic-ioc/ext-schema 中的用户示例,其中 DSM 用于类型安全地支持用户定义的 Map类型)。

    -柯

    【讨论】:

      猜你喜欢
      • 2011-07-02
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多