C++ Primer 类的模板函数特化

C++语言 码拜 9年前 (2015-10-08) 1005次浏览
代码如下:

template <class Type> 
class Queue 
{
public:
	//代码略
	//...
private:
	//代码略
	//...
public:
    void Queue<Type>::push( Type & )     
	{
		//代码略
		//...
	}
	void pop()           
	{
		//代码略
		//...
	}
	//C++Primer第16.6.3.章节
	//特化成员而不特化类
	//照着书上的代码复制粘贴过来在VS2005下编译报错
	//error C2039: “push”: 不是“Queue<Type>”的成员
	template<>
	Queue<const char*>::push(const char *const &val)
	{
		//代码略
		//...
	}
	template<>
	void pop( )
	{
		//代码略
		//...
	}
};

需求是为Queue类实现const char * 类型的特化函数,请问这是编译器的问题没得办法解决吗?代码是照着C++ Primer书上复制粘贴的。

解决方案:10分
请把那一段代码挪到类定义外面。
解决方案:10分
//C++Primer第16.6.3.章节
    //特化成员而不特化类
    //照着书上的代码复制粘贴过来在VS2005下编译报错
    //error C2039: “push”: 不是“Queue<Type>”的成员
    template<>
    Queue<const char*>::push(const char *const &val)
    {
        //代码略
        //...
    }
    template<>
    void pop( )
    {
        //代码略
        //...
    }

这个放到类外面,这是和外面的那个模板类并列的

解决方案:20分
正常的代码应该是这样

template <class Type>
class Queue
{
    void push(Type &);
};
template <>
    void Queue<const char*>::push(const char *&val)
{
}

请自行比对


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++ Primer 类的模板函数特化
喜欢 (0)
[1034331897@qq.com]
分享 (0)