CLion中可变参数模板和元组的虚假类型错误?

时间:2017-01-29 01:48:45

标签: c++ templates variadic-templates clion

我正在尝试创建一个构造函数,它采用类型为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;
}

THE PROOF

为什么构造函数中的元组是用重复类型创建的? (int,char,int,char)当我只指定(int,char)时。我是否误解了模板的工作原理,还是只是IDE的错误?

0 个答案:

没有答案