gpt4 book ai didi

c++ - 避免复制子类中的所有构造函数

转载 作者:IT老高 更新时间:2023-10-28 21:49:04 25 4
gpt4 key购买 nike

所以一个基类有多个构造函数:

sf::Sprite()
sf::Sprite(const Texture& texture)
sf::Sprite(const Texture& texture, const IntRect& rectangle)

而且我多次将这个类子类化:

class Sub : public sf::Sprite {
public:
Sub() : sf::Sprite() {};
Sub(const Texture& texture) : sf::Sprite(texture) {};
Sub(const Texture& texture, const IntRect& rectangle) : sf::Sprite(texture, rectangle) {};

// My subclass specific code
};

如您所见,我必须为每个子类重复这三个构造函数。有没有办法避免这种情况,因为构造函数通常不做任何特别的事情? 有时我需要一些类特定的初始化,所以直接复制所有内容并不总是可行的。

最佳答案

您可以通过 inheriting constructors 完成此操作(C++11 起)。

If the using-declaration refers to a constructor of a direct base of the class being defined (e.g. using Base::Base;), all constructors of that base (ignoring member access) are made visible to overload resolution when initializing the derived class.

例如

class Sub : public sf::Sprite {
public:
using sf::Sprite::Sprite;

// My subclass specific code
};

如果继承的构造函数用于初始化一个Sub,则sf::Sprite子对象使用继承的构造函数初始化,Sub的所有其他成员 就像由默认的默认构造函数初始化一样。

如果有特殊情况需要处理,仍然可以在Sub中定义构造函数,继承的具有相同签名的构造函数将被隐藏。

As with using-declarations for any other non-static member functions, if an inherited constructor matches the signature of one of the constructors of Derived, it is hidden from lookup by the version found in Derived.

关于c++ - 避免复制子类中的所有构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44005565/

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