成员初始化部分中的复杂语句?

时间:2009-04-13 13:36:29

标签: c++ member-initialization

我有这个:

struct myClass{
    multiset<string,binPred<string> > values ;

    myClass(const char param1, const char param2) : values(less<string>())
    { }
} ;

我需要使用不同的仿函数初始化 values 成员,具体取决于 param1 {{1}的值} 即可。不幸的是,决定使用哪个仿函数的逻辑并不那么简单,一旦 param2 被构造,我就无法改变它的相关比较函子。

所以......我需要将所有决策逻辑放在成员初始化部分,但我不知道如何使用 values 运算符。
是否有可能在那里放置更复杂的陈述? (如?: staments)

如果没有,有没有办法延迟 switch 的构建,所以我可以在构造函数的主体中初始化它?

感谢。

3 个答案:

答案 0 :(得分:9)

调用函数:

myClass(const char param1, const char param2) 
             : values( MakeComplicatedDecision( xxx ) ) {
}

并将你的逻辑放在函数中。

答案 1 :(得分:4)

您可以使用静态成员函数来接受您拥有的参数并返回必要的值。这完全解决了问题,并允许清理易于调试的代码。

答案 2 :(得分:0)

您可以使用指向多集的指针来获取值,然后使用new在构造函数中创建它。这会延迟构建,但它确实意味着少量的开销。