C 中模板类中模板函数的显式专业化
错误:
开发人员尝试在非命名空间范围的模板类中显式专门化模板函数可能会在 GCC 中遇到编译错误。以下代码展示了这样的问题:
struct tag {}; template< typename T > struct C { template< typename Tag > void f( T ); // declaration only template<> inline void f< tag >( T ) {} // ERROR: explicit specialization in }; // non-namespace scope 'structC<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中文网其他相关文章!