这个问题在这里已经有了答案:
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/