[英]Specializing member function template of a non-template class
成員函數模板bar
的以下專業化有效嗎? 它可以在gcc 4.5.3和VS .NET 2008上進行編譯。我很困惑,因為我隱約記得要閱讀的內容是功能模板不能專門化。
struct Foo
{
template<typename T>
void bar();
};
template<typename T>
void Foo::bar(){}
template<>
void Foo::bar<bool>(){}
int main()
{
Foo f;
f.bar<char>();
f.bar<bool>();
}
函數模板不能是部分專用的,但是可以顯式專用的,您的代碼完全正確。
在C ++ 11中考慮了功能模板的部分專業化,但由於可以使用功能模板重載來解決相同的問題, 因此被拒絕 。 但是,在執行此操作時需要注意一些注意事項 。
例:
template <typename T> void foo(T);
void foo(int);
foo(10); // calls void bar(int)
foo(10.f); // calls void bar(T) [with T = float]
foo(10u); // calls void bar(T) [with T = unsigned int]!!
對於您的情況,這種事情可能會起作用
struct Foo
{
template<typename T>
void bar(T dummy);
void bar(bool dummy);
};
template<typename T>
void Foo::bar(T dummy) { }
void Foo::bar(bool dummy) { }
int main()
{
Foo f;
f.bar('a');
f.bar(true);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.