我有两个工厂函数模板makeObjectA
和makeObjectB
,它们从类模板(ClassTemplateA
和ClassTemplateB
)创建实例。 makeObject
函数调用另一个函数模板(create
),它实际实例化对象并执行一些通用初始化。因此,create
函数模板需要两个模板参数,一个指定要创建的对象类型,另一个作为对象的模板参数传递。
以下是我尝试做的一个示例,但我不明白为什么这段代码会编译,以及如何修复它?
factory.h(17): error C2988: unrecognizable template declaration/definition
ClassTemplates.h
#pragma once
template <typename T>
class ClassTemplateA {
public:
ClassTemplateA() {}
};
template <typename T>
class ClassTemplateB {
public:
ClassTemplateB() {}
};
Factory.h
#pragma once
#include "ClassTemplates.h"
template <typename T>
ClassTemplateA<T>& makeObjectA()
{
return create<ClassTemplateA, T>();
}
template <typename T>
ClassTemplateB<T>& makeObjectB()
{
return create<ClassTemplateB, T>();
}
template<typename TClassTemplate, typename T>
TClassTemplate<T>& create()
{
TClassTemplate<T>* object = new TClassTemplate<T>();
// Do some generic initialization after construction.
return *object;
};
Main.cpp的
#include "ClassTemplates.h"
#include "Factory.h"
int main()
{
ClassTemplateA<int>& objectA = makeObjectA<int>();
ClassTemplateB<int>& objectB = makeObjectB<int>();
}
答案 0 :(得分:3)
您需要模板模板参数:
template <template <typename> class TClassTemplate, typename T>
TClassTemplate<T>& create()
{
TClassTemplate<T>* object = new TClassTemplate<T>();
// Do some generic initialization after construction.
return *object;
};