2

我有这个:

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

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

我需要根据和values的值使用不同的函子初始化成员。不幸的是,决定使用哪个仿函数的逻辑并不那么简单,一旦构建,我就无法更改其关联的比较仿函数。param1param2values

所以......我需要将所有决策逻辑放在成员初始化部分,但我不知道如何使用?:运算符。
是否可以在其中放置更复杂的语句?(如switch语句)

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

谢谢。

4

3 回答 3

9

调用一个函数:

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

并将您的逻辑放入函数中。

于 2009-04-13T13:39:41.510 回答
4

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

于 2009-04-13T13:40:50.757 回答
0

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

于 2009-04-13T13:38:04.167 回答