我正在尝试创建一个构造函数,它采用类型为enum(key)和tuple(value)的映射。元组中的类型是未知的。因此我制作了一个可变参数模板(参数包):
template <typename ...T> Entity(map<TYPE, tuple<T...>>) {}
我的主要人物:
map<TYPE, tuple<int,char>> theMap;
Entity* e = new Entity(theMap);
问题是我的IDE抱怨:
Parameter type mismatch: Class map<TYPE, tuple<int,char> is not compatible with class 'map<TYPE,tuple<int,char,int,char>>'
所以不知怎的,我得到了构造函数元组中每个类型的重复。这样编译没有任何错误,但它只是非常讨厌。
我的代码的完整示例:
#include <string>
#include <map>
#include <tuple>
using namespace std;
enum TYPE {DRAWABLE, COLLIDABLE, MOVABLE};
class Entity {
private:
public:
template <typename ...T> Entity(map<TYPE, tuple<T...>>) {}
};
int main() {
map<TYPE, tuple<int,char>> theMap;
Entity* e = new Entity(theMap);
return 0;
}
为什么构造函数中的元组是用重复类型创建的? (int,char,int,char)当我只指定(int,char)时。我是否误解了模板的工作原理,还是只是IDE的错误?