C++ 使用stl数据结构的不同接口

C++ 使用stl数据结构的不同接口,c++,stl,C++,Stl,我想用这两个构造函数创建一个类,但是unordered\u map*和在构造函数中创建的这两个构造函数不兼容。如何在保留构造函数原型的同时更改以使以下代码正常工作 struct eq_fun { bool operator()(void* s1, const void* s2) const { return ( _cmp_fn((void*)s1,(void*)s2) == 0 ); } int (*_cmp_fn)(void*, void*);

我想用这两个构造函数创建一个类,但是
unordered\u map*
和在构造函数中创建的这两个构造函数不兼容。如何在保留构造函数原型的同时更改以使以下代码正常工作

struct eq_fun
{
    bool operator()(void* s1, const void* s2) const
    {
        return ( _cmp_fn((void*)s1,(void*)s2) == 0 );
    }
    int (*_cmp_fn)(void*, void*);
    eq_fun(int (*fn)(void*, void*)):_cmp_fn(fn){}
};

struct hash_fun
{
    size_t operator()(const void *p) const
    {
        return _hash_fn(p);
    }
    int (*_hash_fn)(const void*);
    hash_fun(int (*fn)(const void*)):_hash_fn(fn){}
};

class MyClass {
    private:
        unordered_map<void*,void*> *h_map;
    public:
        template<class EQ,class HF>MyClass()
        { h_map = new unordered_map<void*,void*,HF,EQ>(); }

        MyClass(int (*h)(const void*),int (*cmp)(void*,void*))
        { h_map = new unordered_map<void*,void*,hash_fun,eq_fun>(0,hash_fun(h),eq_fun(cmp)); }
};
struct eq\u fun
{
布尔运算符()(void*s1,const void*s2)const
{
返回(_cmp_fn((void*)s1,(void*)s2)==0;
}
int(*cmp_fn)(无效*,无效*);
eq_fun(int(*fn)(void*,void*):_cmp_fn(fn){}
};
结构哈希函数
{
size_t运算符()(const void*p)const
{
返回值_hash_fn(p);
}
int(*u hash_fn)(常量无效*);
hash_fun(int(*fn)(const void*):_hash_fn(fn){}
};
类MyClass{
私人:
无序_图*h_图;
公众:
templateMyClass()
{h_-map=新的无序_-map();}
MyClass(int(*h)(常量无效*),int(*cmp)(无效*,无效*)
{h_-map=新的无序_-map(0,hash_-fun(h),eq_-fun(cmp));}
};

似乎您正试图根据构造函数的模板参数创建不同的模板成员。这在C++中是不可能的,有两种方式。
  • 这:

    unordered_map<void*,void*> *h_map;
    h_map = new hash_map<void*,void*,HF,EQ>();
    
    unordered_-map*h_-map;
    h_-map=新哈希_-map();
    
    无效,因为
    哈希映射
    不是
    无序映射
    的派生类

  • 您不能像尝试使用
    EQ
    HF
    参数那样混合不可转换的模板参数<代码>哈希映射和
    哈希映射
    是不兼容的类型

我能看到的唯一出路是选择
hash_-map
unordered_-map
并将
MyClass
作为模板
MyClass


注意,当TR1类
散列映射
被接受到C++11中时,它被重命名为
无序映射
。所以它们是一样的,在同一个代码中混合这两种类型是没有意义的。参考资料:

什么解决方案?具体来说,如何编写一个类?好吧,这段代码无法编译。用文字描述您试图完成的任务以及遇到的问题。如果您遇到编译器错误,请引用它们。这对你们来说可能很明显,但其他人不可能猜到你们在做什么。我想用这两个构造函数创建一个类,但无序的_map*和在构造函数中创建的这两个是不兼容的。我怎样才能在保留构造函数原型的同时进行更改以使其工作。请将其放在问题中,而不是隐藏在注释中。对不起,这是一个打字错误。我不想把无序映射和散列映射混在一起。我修改了原始帖子中的代码。看起来无序映射*和无序映射*是兼容的,但无序映射*和无序映射*不兼容。这取决于
HF
EQ
是什么。