使用带有Pococapsule的枚举(C ++ IoC-container)

时间:2010-01-01 15:16:26

标签: c++ ioc-container poco

有没有办法在不使用工厂方法的情况下将pumapsule中的枚举值作为方法参数提供?

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

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文件中声明枚举使用那样灵活,但它向前移动了项目。谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

在C / C ++中,枚举可以隐式传递给int,因此,您可以简单地执行:

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

-ke

答案 1 :(得分:0)

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

在C / C ++中,枚举可以隐式传递给int,因此,你可以在method-arg元素中简单地使用type =“long”。

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

-ke