5

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

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 > () );

等等。

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

4

1 回答 1

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>());
    }
};
于 2012-11-21T15:57:25.803 回答