簡體   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