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

在C中创建成员函数模板专业化,第1张

概述我正在编写一个类,我想在其中创建成员函数模板特化 namespace aha{class Foo{public: template < typename T > T To() const { // some code here }};template <>bool Foo::To < bool > () const{ // s 我正在编写一个类,我想在其中创建成员函数模板特化

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 pleasepublic:    template < typename T >    T To() const {        return this->doTo(Type<T>());    }};
总结

以上是内存溢出为你收集整理的在C中创建成员函数模板专业化全部内容,希望文章能够帮你解决在C中创建成员函数模板专业化所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1226389.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存