Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;模板方法类型约束_C++_Templates_Inheritance_Children_Assertion - Fatal编程技术网

C++ 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++代码,但我想找到其他方法来实现它。更值得注意的是,它不允许您为该函数提供不受支持的值,并

我必须创建一个模板函数,它的T值是基类(Actor)的子类。在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中键入不受支持的值时,该行变为红色下划线,因此您知道键入的是错误的。我认为这在这里是不可能的,但我正在寻找一些犯错误的人,他们可以找到错误的地方。制作一个请柬,这样我们就可以复制它,因为,我知道,没有理由让它在任何平台上给出你报告的错误。