模板类中函数模板的特化问题
template< typename ConstelType >
class ML
{
public:
ML(const std::vector< ConstelType >& constel):__constel(constel) { }
ML(const Comm::Modulation<ConstelType>& modulation):__constel(modulation.gen_constel()) { }
template< typename re_Type, typename ch_Type >
int ML_one_dim(const re_Type& re, const ch_Type& ch) const;
private:
const std::vector< ConstelType >& __constel;
template< typename re_Type >
double CaculDist(const re_Type& re, const re_Type& tr) const;
template <> //错误:显式特例化出现在非命名空间作用域 ‘class Comm::ML<ConstelType>’ 中
double CaculDist<const double&>(const double& re, const double& tr);
};
以上我的源程序,只是一个模板类的声明。错误如程序中所示,所用编译器是g++。
请问无法对类模板中的函数模板进行特化声明吗? C++标准是如此规定的吗? 谢谢!!!
class ML
{
public:
ML(const std::vector< ConstelType >& constel):__constel(constel) { }
ML(const Comm::Modulation<ConstelType>& modulation):__constel(modulation.gen_constel()) { }
template< typename re_Type, typename ch_Type >
int ML_one_dim(const re_Type& re, const ch_Type& ch) const;
private:
const std::vector< ConstelType >& __constel;
template< typename re_Type >
double CaculDist(const re_Type& re, const re_Type& tr) const;
template <> //错误:显式特例化出现在非命名空间作用域 ‘class Comm::ML<ConstelType>’ 中
double CaculDist<const double&>(const double& re, const double& tr);
};
以上我的源程序,只是一个模板类的声明。错误如程序中所示,所用编译器是g++。
请问无法对类模板中的函数模板进行特化声明吗? C++标准是如此规定的吗? 谢谢!!!
...全文
相关推荐
一些模板类的源代码 verygood
对c++的模板类有点迷茫的请看啦 很好的编程资料 非常方便
C++STL模板学习讲义
C++STL模板学习,适合STL初学者,适合入门,主要包括STL容器和一些基本泛型算法
程序员常见面试题(算法数据结构)
程序员常见面试题(算法数据结构)程序员常见面试题(算法数据结构)
C++函数与类模板解析[可运行源码]
本文详细介绍了C++中的函数模板和类模板的概念及其应用。函数模板通过使用虚拟类型T,允许开发者编写一个通用函数,适用于多种数据类型,从而避免了函数重载时的代码重复。文章通过具体的代码示例展示了函数模板的定义、使用及注意事项,如模板参数的默认设置和显式指定数据类型。此外,还探讨了类模板的使用,通过比较类的例子说明了如何利用类模板简化代码,提高代码的复用性和灵活性。最后,文章还涉及了模板类的继承问题,展示了如何从模板类派生出新的模板类或具体类。
C++模板特化与非类型参数[项目源码]
本文深入探讨了C++中的非类型模板参数和模板特化技术,旨在提升代码的效率和灵活性。非类型模板参数允许在编译时接收常量值,如整数、枚举等,从而生成不同的代码。模板特化则允许为特定类型定制模板逻辑,包括全特化和偏特化,以满足不同场景的需求。文章通过多个代码示例详细展示了这些技术的应用,如固定栈大小、指针类型特化等。此外,还讨论了模板分离编译中的常见问题及解决方法,如将模板定义和实现放在同一头文件或显式实例化模板类型。这些高级模板特性为编写高效、类型安全的泛型代码提供了坚实基础。


