我试图在C++ (C++17很好)中创建一个构造函数,它只有一个参数,我希望从两种类型继承这个参数。
所以我有这样的结构:
struct SceneNodeData {
Drawable* drawable;
Transformable* transformable;
SceneNodeData(
Drawable* drawable,
Transformable* transformable
) : drawable(drawable), transformable(transformable) {}
};但为了方便起见,我需要另一个构造函数,它只有一个参数,即Drawable和Transformable (如Sprite):
struct SceneNodeData {
Drawable* drawable;
Transformable* transformable;
SceneNodeData(
<Drawable, Transformable>* drawableAndTransformable
) : drawable(drawableAndTransformable), transformable(drawableAndTransformable) {}
};在C++中有办法做到这一点吗?
发布于 2019-05-03 16:02:50
您可以使用模板和constarin类型,使用类型特征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) {}
};发布于 2019-05-03 16:01:30
不完全是,但是:
Drawable和Transformable派生的类DrawableTransformable*,并让构造函数接受DrawableTransformable*类型的参数。从DrawableTransformable派生的任何具体类都需要实现来自Drawable和Transformable的纯虚拟函数。T*定义构造函数模板,并检查T是否公开从Drawable和Transformable派生。或者您可以省略SFINAE检查,只需让drawable和transformable的初始化过程中出现一个严重的错误。https://stackoverflow.com/questions/55973379
复制相似问题