gpt4 book ai didi

c++ - 从类模板创建对象的工厂函数模板?

转载 作者:行者123 更新时间:2023-11-30 02:19:19 28 4
gpt4 key购买 nike

我有两个工厂函数模板 makeObjectAmakeObjectB 从类模板(ClassTemplateAClassTemplateB 创建实例>). makeObject 函数调用另一个函数模板 (create),该模板实际上实例化对象并执行一些通用初始化。 create 函数模板因此需要两个模板参数,一个指定要创建的对象类型,另一个作为对象的模板参数传递。

这是我正在尝试做的事情的示例,但我不明白为什么这段代码无法编译,以及如何修复它?

factory.h(17): error C2988: 无法识别的模板声明/定义

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>();
}

最佳答案

你想要模板模板参数:

template <template <typename> class TClassTemplate, typename T>
TClassTemplate<T>& create()
{
TClassTemplate<T>* object = new TClassTemplate<T>();

// Do some generic initialization after construction.

return *object;
};

关于c++ - 从类模板创建对象的工厂函数模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50867027/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com