模板类中模板函数的显式专业化: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中文网其他相关文章!