【发布时间】:2017-04-05 21:11:52
【问题描述】:
如何声明一个模板类(组件库),它将包含组件的向量作为参数? 以下是一个精简版的代码示例:
// 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.cpp 的 [ library intLib ] 行上使用未定义的类 'library'
C3855“库”:模板参数“C”与声明不兼容 在线的 [ }; ] 在 library.h 中(最后一行)
C3855 'library': 模板参数 'vector' 与 [ } 行的声明不兼容; ] 在 library.h 中(也是最后一行)
我看过很多关于模板模板参数的不同文章,这个答案到目前为止特别有用,尽管它似乎没有解决我目前遇到的问题: Template class with template container
想要的结果是能够写出这样的语句:
library<resistor, vector<resistor>> resistor_lib;
library<capacitor, vector<capacitor>> capacitor_lib;
library<inductor, vector<inductor>> inductor_lib;
library<component, vector<component>> component_lib;
主要都是使用相同的模板。
谢谢,非常感谢任何帮助
【问题讨论】:
-
你没有默认构造函数,也没有公共构造函数。
-
是的,抱歉,忘记将构造函数添加到示例中。这只是一个非常精简的代码,试图说明问题而不会太复杂。原始代码确实具有公共默认和参数化构造函数,但仍然无法编译
标签: c++ templates vector template-templates