如果标题令人困惑,我深表歉意。我想要做的是创建一个从头开始实现std :: map的类模板。我要实现的是不要在模板参数中使用特定的数据类型。请参见下面的代码:
#include "pch.h"
#include <iostream>
#include <string>
using namespace std;
template<typename T, typename N>
class MyCustomMap{
public:
MyCustomMap();
T* keys;
N* values;
};
template<typename T, typename N>
MyCustomMap<T, N>::MyCustomMap(){
this->keys = new T[10];
this->values = new N[10];
}
....
....
int main(){
MyCustomMap<int,string> map; //This works because I specified the argument list
MyCustomMap map; //This is my goal
// The main goal is to call Insert one after another with different data types
map.Insert(1, "Test");
map.Insert("Test2", 2);
return 0;
}
这可能吗?感谢您的任何帮助,谢谢。
答案 0 :(得分:2)
MyCustomMap map;
这可能吗?
简短回答:否。
长答案:如果您将一些参数传递给构造函数
MyCustomMap map{1, "one"};
有可能推论int
的{{1}}和T
的{{1}}。
但是,不幸的是,仅从C ++ 17开始;请查看this page,以了解更多信息。
但是,如果不将参数传递给构造函数,则无法推断参数。
编辑
OP精确
char const [4]
对不起:我误解了你的问题。
但是答案仍然是:否。
C ++是一种经过编译的强类型语言。
模板类不是类:是一组类。
实例化对象
V
此对象(在这种情况下为// The main goal is to call Insert one after another with different data types
map.Insert(1, "Test");
map.Insert("Test2", 2);
)必须是精确类型的对象;编译器在那个精确位置就知道了。
因此,您无法实例化类型为MyCustomMap map;
的{{1}}。您必须选择几种类型。可能具有默认值,可能通过构造函数参数推导类型,可能使用map
类型并使用函数返回的类型,但是在声明变量时必须选择类型。不会。
而且,无论如何,
map
您想要两种不同类型的当代物品。
在C ++ 17中有朝着这个方向发展的东西:寻找MyCustomMap
和auto
。但是不够灵活。