在C ++中创建成员函数模板专业化

Sau*_*nha 5 c++ templates

我正在写一个我想在其中创建成员函数模板专业化的类

namespace aha
{
class Foo
{
public:
    template < typename T >
    T To() const
    {
        // some code here
    }
};
template <>
bool Foo::To < bool > () const
{
    // some other code here
}
}
Run Code Online (Sandbox Code Playgroud)

gcc正在给出错误:

实例化后“ To <bool>”的显式实例化

我只想使用成员函数的模板专门化来做到这一点,以便我的库用户在转换Foo成不同的数据类型时将获得相同的函数,例如

Foo obj;
bool b( obj.To < std::string > () );
int i( obj.To < int > () );
float f( obj.To < float > () );
Run Code Online (Sandbox Code Playgroud)

等等。

请让我知道我在代码中做错了什么。

Max*_*kin 1

实例化后显式实例化“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>());
    }
};
Run Code Online (Sandbox Code Playgroud)