成员模板:Failed to specialize function template 'TYPE *__thiscall Factory::c
运行环境:VC6.0,编译报错Failed to specialize function template 'TYPE *__thiscall Factory::creteProduct(TYPE &)'
Factory是一个类工厂,我打算把createProduct实现为成员模板,这样可根据具体的Product类型实例化Product,不用为每一个Product都构造一个工厂类;了
其中包含五个文件,源码如下:
/******************************************/
文件:Factory.h
#ifndef _FACTORY_H_
#define _FACTORY_H_
#include "stdafx.h"
#include "Product.h"
class Factory
{
public:
Factory();
virtual ~Factory() ;
template<class TYPE>
TYPE* creteProduct(TYPE& type);
protected:
};
template<class TYPE>
TYPE* Factory::creteProduct(TYPE& type)
{
return new TYPE;
}
/*************************************************/
文件Factory.cpp
#include "Factory.h"
Factory::Factory()
{
}
Factory::~Factory()
{
}
文件Product.h
#ifndef _PRODUCT_H_
#define _PRODUCT_H_
/*******************************************/
class Product
{
public:
virtual ~Product()=0;
protected:
Product();
private:
};
/******************/
class ConcreteProduct:public Product
{
public:
ConcreteProduct();
virtual ~ConcreteProduct();
};
class ConcreteProduct2:public Product
{
public:
ConcreteProduct2();
virtual ~ConcreteProduct2();
};
#endif
/***************************************************/
文件Product.cpp
#include "stdafx.h"
#include "Product.h"
using namespace std;
Product::Product()
{
}
Product::~Product()
{
}
ConcreteProduct::ConcreteProduct()
{
std::cout << "concrete product!"<< endl;
}
ConcreteProduct::~ConcreteProduct()
{
}
ConcreteProduct2::ConcreteProduct2()
{
std::cout << "concrete product2!"<< endl;
}
ConcreteProduct2::~ConcreteProduct2()
{
}
/****************************************************/
主函数:
#include "stdafx.h"
#include "Product.h"
#include "Factory.h"
using namespace std;
int main(int argc, char* argv[])
{
Factory *pFactory = new Factory;
ConcreteProduct CP;
pFactory->creteProduct(CP);/***************此处出错return 0;
}
请问哪里错了,Why?
[解决办法]
囧,超级囧!VC6就是根本不支持成员模板。
[解决办法]
汗,超级汗!VC6就是根本不支持成员模板。