前向声明类型的功能模板专门化

时间:2018-12-13 09:24:05

标签: c++ templates visual-studio-2015 c++14 forward-declaration

无法完全找到副本。

是否可以向前声明函数专业化中使用的类型?

考虑以下代码:

在.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”,则当然可以编译。

1 个答案:

答案 0 :(得分:3)

简单的解决方法是将forward声明放在自己的行上:

if(isset($_POST['brand'])) {
    ->where('p.brand', $_POST['brand'])
}
if(isset($_POST['color'])) {
    ->where('p.color', $_POST['color'])
}
if(isset($_POST['product_type'])) {
    ->where('p.product_type', $_POST['product_type'])
}

VS 2015 on Godbolt接受就可以了。