gpt4 book ai didi

c++ - 函数参数同时继承两种类型

转载 作者:太空狗 更新时间:2023-10-29 20:08:14 24 4
gpt4 key购买 nike

我正在尝试用 C++(C++17 很好)创建一个构造函数,它有一个参数,我希望这个参数从两种类型继承。

所以我有这个结构:

struct SceneNodeData {
Drawable* drawable;
Transformable* transformable;

SceneNodeData(
Drawable* drawable,
Transformable* transformable
) : drawable(drawable), transformable(transformable) {}
};

但是为了方便我想要另一个构造函数,只有一个参数,同时是DrawableTransformable(比如Sprite) :

struct SceneNodeData {
Drawable* drawable;
Transformable* transformable;

SceneNodeData(
<Drawable, Transformable>* drawableAndTransformable
) : drawable(drawableAndTransformable), transformable(drawableAndTransformable) {}
};

有没有办法在 C++ 中做到这一点?

最佳答案

您可以使用模板并使用类型特征约束类型 std::is_convertible检查提供的类型是否可以转换为两种类型。看起来像

struct SceneNodeData {
Drawable* drawable;
Transformable* transformable;

template<typename T, std::enable_if_t<std::is_convertible_v<T*, Drawable*> &&
std::is_convertible_v<T*, Transformable*>, bool> = true>
SceneNodeData(T* drawableAndTransformable) : drawable(drawableAndTransformable), transformable(drawableAndTransformable) {}
};

关于c++ - 函数参数同时继承两种类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55973379/

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