[英]Function Template Specialization with Forward Declared Type
一直没能找到重复的。
是否可以转发声明函数特化中使用的类型?
请考虑以下代码:
在.h
template <typename T>
T* Foo()
{
//generic implementation
}
template<>
class SpecialT* Foo<class SpecialT>();
在.cpp
#include "SpecialT.h"
template<>
SpecialT* Foo<SpecialT>()
{
//specialized implementation
}
是否存在上述可能的语法,并且不会导致大量编译器错误(C2910,C2909,C2768等)?
如果模板头中包含“SpecialT.h”,这当然会编译。
简单的解决方法是简单地将前向声明放在自己的行上:
class SpecialT;
template<>
SpecialT* Foo<SpecialT>();
Godbolt的VS 2015接受它就好了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.