簡體   English   中英

在C ++中創建成員函數模板專業化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM