首页 > 后端开发 > C++ > 如何在 C 中正确显式地特化模板类中的模板函数?

如何在 C 中正确显式地特化模板类中的模板函数?

Susan Sarandon
发布: 2024-11-26 16:59:09
原创
465 人浏览过

How to Correctly Explicitly Specialize Template Functions within Template Classes in C  ?

模板类中模板函数的显式专业化:C 中的语法难题

给定的代码片段举例说明了尝试时出现的编程难题在模板类中显式专门化模板函数。在Microsoft Visual C 2008(VC9)中,代码编译成功;但是,在 Mac 上使用 GCC 4.2 编译时,相同的代码会遇到错误。

GCC 要求在类外部声明显式特化,但这样做的正确语法尚不清楚。将显式特化放在类外部的最初尝试(如下所示)是不正确的:

template< typename T >
template<>
inline void C< T >::f< tag >( T ) {}
登录后复制

正确的方法是将调用转发到部分特化类型的成员函数。下面是更正后的代码:

template<class T, class Tag>
struct helper {
    static void f(T);   
};

template<class T>
struct helper<T, tag1> {
    static void f(T) {}
};

template<class T>
struct C {
    // ...
    template<class Tag>
    void foo(T t) {
        helper<T, Tag>::f(t);
    }
};
登录后复制

此修改引入了一个辅助结构,该结构提供所需的功能,同时遵守 GCC 的语法要求。通过将显式专业化与类本身分离,代码可以成功编译并按预期运行。

以上是如何在 C 中正确显式地特化模板类中的模板函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板