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 的更多信息。
另外,我不得不说问题中之前写的代码对于帮助过我的人来说工作得很好,所以也许对你来说是一个很好的解决方案。
我必须创建一个模板函数,它的 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 的更多信息。
另外,我不得不说问题中之前写的代码对于帮助过我的人来说工作得很好,所以也许对你来说是一个很好的解决方案。