c – 是否可以在运行时切换到不同的基类构造函数?

前端之家收集整理的这篇文章主要介绍了c – 是否可以在运行时切换到不同的基类构造函数?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我正在编写Derived,并且必须继承自Base,我不能控制,并有两个单独的构造函数和一个已删除的副本和移动构造函数
struct Base {
    Base(int i);
    Base(const char *sz);
    Base(const Base&) = delete;
    Base(const Base&&) = delete;
};

struct Derived {
    Derived(bool init_with_string);
};

现在,根据another_param的值,我必须使用构造函数或另一个初始化我的基类;如果C有点不那么严格,那就像:

Derived::Derived(bool init_with_string) {
    if(init_with_string) {
        Base::Base("forty-two");
    } else {
        Base::Base(42);
    }
}

(这对于在直线表达式中计算值传递给基类构造函数/字段初始化函数是非常麻烦的所有情况也是有用的,但我是离题的)

不幸的是,即使我没有看到这种东西的特定代码或对象模型的障碍,这是无效的,我不能想到容易的解决方法.

有没有办法,我不知道?

解决方法

静态功能可以在这里工作
struct Base {
    Base(int i);
    Base(const char *sz);
    Base(const Base&) = delete;
    Base(const Base&&) = delete;
};

struct Derived : Base {
   using Base::Base;

   static Derived construct(bool with_string) {
      if(with_string) return { "forty-two" };
      return { 42 };
   }
};

请注意,这不需要移动,也不需要复制构造函数.如果要将其作为本地使用,则需要将其绑定到引用,以避免移动它

auto &&w = Derived::construct(true);
auto &&wo = Derived::construct(false);

猜你在找的C&C++相关文章