这个问题在这里已经有了答案:




9年前关闭。






我想知道是否可以检查类型 T 是否继承了我的泛型/模板化方法中的某个类。我可以在 C# 中使用“where”轻松完成此操作。例如,在我的游戏引擎中,我有一个通用管理器的概念,它是一个 XNA 组件。它有一个可绘制对象列表(可以是实体、粒子等)。所以我的类定义是这样的:

public class LayerableDrawableGenericManager<T> : Microsoft.Xna.Framework.DrawableGameComponent where T : Drawable

所以我们只能有一个可以绘制的对象(一个继承 drawable 的对象)的通用管理器。我们需要确保这一点,因为在我的通用管理器中,我在所有这些 T 类型对象上调用 Draw()。如果不确保 T 类型对象将继承 Drawable 类(其中包含 Draw() 方法),我将无法绘制我的对象。

无论如何,想知道这是如何在 C++ 中完成的。我已经搜索了诸如“Where C++”和“Where 关键字 C++”之类的东西,我所有的结果都是诸如“我在哪里可以学习 C++”之类的东西。

最佳答案

这通常在 C++ 模板中通过假设类型提供您需要的功能来完成。例如,考虑以下函数模板:

template <typename T>
int get_value(T const& x)
{
    return x.get();
}

struct S { int get() const { return 42; } };

如果调用 get_value(S()) ,编译器将使用 get_value 实例化 T = S ,然后调用 S::get

如果您调用 get_value(42) ,编译器将尝试使用 get_value 实例化 T = int ,但实例化将失败并且您将收到编译错误,因为 int 没有任何成员函数(或多或少名为 get )。

关于c++ - C#'s "其中 T : type"in C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9814745/

10-13 08:06