如何使用不同对象的模板容器作为参数创建模板类
How to create a template class with a template container of different objects as a parameter
如何声明一个模板类(组件库),它将采用包含组件的向量作为参数? 下面是一个精简版本的代码作为示例:
// In Library.h
using namespace std;
template<typename T,
template <typename, typename = std:allocator<T>> class Container>
class library {
Container<T> comp_lib;
library(Container<T> &Vc) {comp_lib = Vc}
};
// In mainProgram.cpp
#include "Library.h"
// Other includes...
using namespace std;
int main() {
library<int, vector> intLib;
return(0);
}
正如我之前提到的,这是一个组件库。因此,库模板不是保存包含整数的向量,而是保存包含通用分量的向量、包含电阻的向量、包含电容器的矢量和包含电感器的矢量。其中电阻器、电容器和电感器都是组件基类的派生类。
当我运行代码时,它不会编译,并且我收到以下错误消息:
C2079: 'intLib' 在 mainProgram 的在线 [ Library intLib ] 上使用未定义的类 'library.cpp
C3855 "库":模板参数"C"与声明不兼容 在线 [ };] 在 library.h 中 (最后一行)
C3855 'library':模板参数 'vector' 与 library.h 中 [ }; ] 行上的声明不兼容(也是最后一行)
我已经看了很多关于模板模板参数的不同文章,到目前为止,这个答案特别有用,尽管它似乎没有解决我目前遇到的问题: 具有模板容器的模板类
期望的结果是能够编写如下语句:
library<resistor, vector<resistor>> resistor_lib;
library<capacitor, vector<capacitor>> capacitor_lib;
library<inductor, vector<inductor>> inductor_lib;
library<component, vector<component>> component_lib;
基本上都使用相同的模板。
谢谢,任何帮助都非常感谢
你只需要模板化容器,然后让它告诉存储的类型。标准容器通过value_type
定义来实现这一点。执行以下操作:
template <typename TContainer>
class Library {
private:
TContainer container_;
public:
using container_type = TContainer;
using value_type = typename TContainer::value_type;
Library(const container_type &initValues) {
std::copy(initValues.begin(), initValues.end(),
std::back_inserter(container_));
}
[...]
};
这应该适用于vector
、list
和所有可以"back_inserted"的东西。此外,您还可以通过container_type
和value_type
引用容器和对象类型。
实例的声明方式如下
Library<std::vector<int> > lib(someInitializer);
相关文章:
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 如何使用可选的随机种子参数创建 roll_die() 函数
- 基于参数创建数组
- 从可变参数创建枚举?
- 如何从可变参数模板参数创建 std::tuple<>?
- 在 C++ 中按参数创建不同类型的对象?
- 根据参数创建派生类的新实例
- 基于模板参数创建多个类实现
- C++ 从模板参数创建元组向量
- 从从可调用参数创建的线程对象参数移动构造 C++11 线程
- 在构造函数中使用参数创建一个类数组
- 是否可以使用C 函数中的const int参数创建数组
- 如何使用不同对象的模板容器作为参数创建模板类
- C++:基于积分模板参数创建可变长度元组
- 使用按插入方式排序的参数创建哈希映射
- 避免为非默认参数创建临时变量?
- 是否可以根据参数创建返回对旧项目的引用的构造函数
- 使用整数模板参数创建编译时双精度
- C++ 使用数组作为参数创建泛型函数
- 基于参数创建基类中的派生类