在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给出错误

Explicit instantiation of ‘To < bool >’ after instantiation

我想只使用成员函数的模板特化来实现它,以便我的库的用户在将Foo转换为不同的数据类型时获得相同的功能

Foo obj;
bool b( obj.To < std::string > () );
int i( obj.To < int > () );
float f( obj.To < float > () );

等等.

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

解决方法

Explicit instantiation of ‘To < bool >’ after instantiation

以上说明了一切:它在使用它的通用版本后变得专业化.

函数模板特化可以通过重载来模拟,这是一种更灵活的机制(例如,没有对函数模板进行部分特化,但是可以通过重载实现所需的效果):

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

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...