[英]Creating member function template specialization in C++
我正在編寫一個類,我想在其中創建成員函數模板特化
namespace aha
{
class Foo
{
public:
template < typename T >
T To() const
{
// some code here
}
};
template <>
bool Foo::To < bool > () const
{
// some other code here
}
}
gcc給出錯誤:
實例化后顯式實例化'To <bool>'
我想只使用成員函數的模板特化來實現它,以便我的庫的用戶在將Foo
轉換為不同的數據類型時獲得相同的功能
Foo obj;
bool b( obj.To < std::string > () );
int i( obj.To < int > () );
float f( obj.To < float > () );
等等。
請讓我知道我在代碼中做錯了什么。
實例化后顯式實例化'To <bool>'
以上說明了一切:它在使用它的通用版本后變得專業化。
函數模板特化可以通過重載來模擬,這是一種更靈活的機制(例如,沒有對函數模板進行部分特化,但是可以通過重載實現所需的效果):
template<class T> struct Type {}; // similar to boost::type<>
class Foo
{
template<class T>
T doTo(Type<T>) const; // the generic version
bool doTo(Type<bool>) const; // an overload for bool only
// add more overloads as you please
public:
template < typename T >
T To() const {
return this->doTo(Type<T>());
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.