一直无法完全找到拷贝。

是否可以预先声明函数特化中使用的类型?

考虑以下代码:

.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>();

VS 2015 on Godbolt 接受它就好了。

关于c++ - 具有前向声明类型的函数模板特化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53758591/

10-09 13:10