c – 是否可以在运行时切换到不同的基类构造函数?
发布时间:2020-12-16 02:59:56 所属栏目:百科 来源:网络整理
导读:假设我正在编写Derived,并且必须继承自Base,我不能控制,并有两个单独的构造函数和一个已删除的副本和移动构造函数: struct Base { Base(int i); Base(const char *sz); Base(const Base) = delete; Base(const Base) = delete;};struct Derived { Derived(b
假设我正在编写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); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |