【发布时间】:2017-04-27 10:43:56
【问题描述】:
我目前正在自学/学习泛型编程以及如何使用templates 在运行时声明数据类型。我理解了基本示例,您可以将变量设置为模板,以便以后可以创建任何数据类型,但这是我尝试使用类/向量的模板:
#include <string>
#include <vector>
#include <iostream>
using namespace std;
template <class T, class U>
class CMap{
private:
vector<T> keys;
vector<U> values;
public:
void insert(T key, U value){
keys.push_back(key);
values.push_back(value);
}
void get(int n){
cout << keys[n] << " values ->" << values[n];
}
};
int main(){
CMap<string, int> grades;
grades.insert("Jones", 12);
grades.insert("Smith", 40);
grades.get(0);
cout << endl;
grades.get(1);
cout << endl;
}
我知道我们创建了 T 和 U 作为模板,它们将进入 vector 数据类型。我也知道我们可以动态使用insert 方法,因为T 和U 是模板。
我不明白的:
当我宣布我的班级时,我被告知要添加以下 <string, int>
我不明白这是在做什么?它怎么知道第一个参数应该转到vector<t> keys 而<> 中的第二个参数应该转到vector<u> values - 如果这是它正在做的事情?
【问题讨论】:
-
好吧,你已经给它们命名了——第一个是
T,它接收string,第二个是U,它接收int。 -
“如何使用模板在运行时声明数据类型” 是什么让您觉得模板可以做到这一点?
-
什么令人困惑?它像函数和参数一样工作。你有一个模板,当你使用它时,你提供参数......它不会在运行时发生。
-
@luk32 参数。您为参数提供参数。 :)
-
是的,是的,我的错,模板也是如此。我们用参数声明它们,并使用提供参数,以便用参数替换参数。 (希望我做对了=)
标签: c++ class templates vector