C++ C++;模板方法类型约束
我必须创建一个模板函数,它的T值是基类(Actor)的子类。在C#中是这样做的:C++ C++;模板方法类型约束,c++,templates,inheritance,children,assertion,C++,Templates,Inheritance,Children,Assertion,我必须创建一个模板函数,它的T值是基类(Actor)的子类。在C#中是这样做的: //C# public T Create<T>() where T : Actor { } /C# public T Create(),其中T:Actor { } 如果你看一下C#MSD(): 通用定义中的where子句指定 在泛型中用作类型参数参数参数的类型 类型、方法、委托或局部函数。[] 我尝试了这个C++代码,但我想找到其他方法来实现它。更值得注意的是,它不允许您为该函数提供不受支持的值,并
//C#
public T Create<T>() where T : Actor
{
}
/C#
public T Create(),其中T:Actor
{
}
如果你看一下C#MSD():
通用定义中的where子句指定
在泛型中用作类型参数参数参数的类型
类型、方法、委托或局部函数。[]
我尝试了这个C++代码,但我想找到其他方法来实现它。更值得注意的是,它不允许您为该函数提供不受支持的值,并且/或者,如果您这样做,您很容易检测到错误。这种方式对我来说不太好
//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*Create()
{
静态断言(std::是::value的基础,L“T必须从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;
}
//T必须从Actor继承
模板
typename std::enable_if最后,我得到了与我搜索的内容完全相同的东西。它为您提供实时错误信息,而无需构建解决方案。这是我发现的最类似于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;
}
//T必须从Actor继承
模板
typename std::enable_如果您能具体说明哪些不起作用?它编译吗?还是不做你想做的?我觉得还好吧?怎么了?我不知道在做什么。项目没有编译,但控制台错误不清楚(没有显示我写的消息),因此如果有人收到我的代码并试图输入不受支持的值,我想我不知道是什么错了。在C中键入不受支持的值时,该行变为红色下划线,因此您知道键入的是错误的。我认为这在这里是不可能的,但我正在寻找一些犯错误的人,他们可以找到错误的地方。制作一个请柬,这样我们就可以复制它,因为,我知道没有理由让它在任何平台上给出你报告的错误。你能说明什么是不起作用的吗?它编译吗?还是不做你想做的?我觉得还好吧?怎么了?我不知道在做什么。项目没有编译,但控制台错误不清楚(没有显示我写的消息),因此如果有人收到我的代码并试图输入不受支持的值,我想我不知道是什么错了。在C中键入不受支持的值时,该行变为红色下划线,因此您知道键入的是错误的。我认为这在这里是不可能的,但我正在寻找一些犯错误的人,他们可以找到错误的地方。制作一个请柬,这样我们就可以复制它,因为,我知道,没有理由让它在任何平台上给出你报告的错误。