繁体   English   中英

具有前向声明类型的函数模板专业化

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM