我有一些具有模板化功能的輔助模板。我使用它爲其它基於策略的模板類投或不投一定的參考價值特定類型:具有模板化功能的專業化模板類
// use this when needed additional value cast
template <typename T>
struct AdditionalValueStaticCaster
{
template <typename U>
static T cast(U u)
{
return static_cast<T>(u);
}
};
// use this specialization when no needed to cast value
template <>
struct AdditionalValueStaticCaster<void>
{
template <typename U>
static U cast(U u)
{
return u;
}
};
現在我想這些類分開來聲明和實現(h和.hh文件)
所以我寫的聲明是這樣的:
template <typename T>
struct AdditionalValueStaticCaster
{
template <typename U>
static T cast(U u);
};
template <>
struct AdditionalValueStaticCaster<void>
{
template <typename U>
static U cast(U u);
};
現在我想寫的實現。這是確定:
template <typename T>
template <typename U>
T AdditionalValueStaticCaster<T>::cast(U u)
{
return static_cast<T>(u);
}
但是,這會導致錯誤error: too many template-parameter-lists
template<>
template <typename U>
U AdditionalValueStaticCaster<void>::cast(U u)
{
return u;
}
如果我刪除線template<>
所有編譯好了,但我仍然有一個問題:是不是正確的解決方案或我錯過了什麼?
是的,你可以。你應該試試。 – Barry