[英]Explicit specialization - template-id does not match any template declaration
[英]Template specialization implementation in cpp file causes template-id does not match error
考慮以下代碼:
class Bar;
enum Values
{
ValA,
ValB, // ...
};
template< typename T >
struct Foo : virtual public Bar
{
};
template<>
struct Foo< ValA >
{
void doSomething();
};
如果我在頭文件中定義了doSomething()
的實現,那么當我使用Foo::doSomething()
時,程序不會抱怨。 但是,如果將實現按如下所示移動到cpp文件,則會收到錯誤消息:
template<>
void Foo< ValA >::doSomething()
{
// ...
}
錯誤:
error: template-id 'doSomething<>' for 'void Foo<(Values)0u>::doSomething()' does not match any template declaration.
我不確定為什么會失敗。 我認為,將專用實現移至cpp文件應該不是問題。 我以前做過
有幾個問題。
@dyp在您的問題的評論部分中指出了一個。 您需要使用:
void Foo< ValA >::doSomething()
{
}
代替
template<>
void Foo< ValA >::doSomething()
{
}
另一個是您必須將類模板更改為:
template< int T >
struct Foo : virtual public Bar
{
};
如果使用typename作為模板參數,則不能使用ValA
創建Foo
的專業化版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.