C++ 模板方法类型约束

C++ Template Method Type Constrained

我必须创建一个模板函数,它的 T 值是基础 class (Actor) 的子项。在 C# 中,它是这样完成的:

//C#
public T Create<T>() where T : Actor
{
}

如果你看一下 C# MSD (here):

The where clause in a generic definition specifies constraints on the types that are used as arguments for type parameters in a generic type, method, delegate, or local function. [...]

所以,我在我的 C++ 代码中尝试了这个,但我想找到其他方法来实现它。更值得注意的是,不允许您为该函数提供不受支持的值 and/or,如果您这样做,您很容易检测到错误。这种方式不适合我。

//C++
template<typename T>
T* Create()
{
    static_assert(std::is_base_of<Actor, T>::value, L"T must inherit from Actor");

    //Some code
    return actor;
}

提前致谢并问候!

终于,我得到了我正在寻找的东西。它为您提供实时错误信息,而无需构建解决方案。这是我发现的与 C# 最相似的东西。对你也有效。

//T must inherit from Actor
template<typename T>
typename std::enable_if<std::is_base_of<Actor, T>::value, T*>::type Create()
{
    //Some code
    return actor;
}

您可以找到有关 std::enable_if here 的更多信息。

另外,我不得不说问题中之前写的代码对于帮助过我的人来说工作得很好,所以也许对你来说是一个很好的解决方案。