gpt4 book ai didi

c++ - 如何在初始化列表中使用条件

转载 作者:行者123 更新时间:2023-11-30 01:46:43 24 4
gpt4 key购买 nike

我有一个从父类派生的子类。我需要使用条件逻辑来确定将哪些参数传递给父类构造函数。我这样做如下:

Child::Child(const std::string & foo)
:Parent(foo=="x"?someClassPtr(new someClass()):someClassPtr(new someOtherClass()))
{
}

但是如果我想为 foo=="y"和 foo=="z"传递不同的参数怎么办?有没有什么方法可以不使用三元运算符来做到这一点?

最佳答案

虽然您绝对可以使用嵌套条件表达式来做到这一点,但我建议不要这样做:即使使用单个条件表达式,表达式也接近于不可读,更不用说两个或三个嵌套条件表达式了。

使用私有(private)静态成员函数将是完成此任务的不错选择:该函数可以“解析”foo 的值,并决定要返回的正确对象:

Child::Child(const std::string & foo)
: Parent(constructParentArgs(foo)) {
}
private static someClassPtr *constructParentArgs(const std::string& foo) {
if (foo == "x") return someClassPtr(new someClass());
if (foo == "y") return someClassPtr(new someOtherClass());
if (foo == "z") return someSubClassPtr(new yetAnotherClass());
// provide a default value here
return someClassPtr(new defaultClass());
}

对于代码的读者来说,这种方法的优点是他们不必为调用父构造函数的细节而烦恼,除非他们想看看发生了什么。当他们阅读标题时,他们都知道您的代码以某种方式创建了父参数。如果他们想了解参数的构造方式,他们总是可以直接访问私有(private)成员函数。

关于c++ - 如何在初始化列表中使用条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32702642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com