C++ C++;通用变量

C++ C++;通用变量,c++,C++,我正在尝试创建泛型变量,如下所示: Class Foo { template<typename T> boost::unordered_map<int, T> items; template<typename T> boost::unordered_map<int, T>& get() { return items<T>; } } // .... void main

我正在尝试创建泛型变量,如下所示:

Class Foo {
    template<typename T>
    boost::unordered_map<int, T> items;

    template<typename T>
    boost::unordered_map<int, T>& get() {
          return items<T>;
    }
}

// ....
void main() {
    Foo foo;
    SomeClass d();
    foo.get<SomeClass>().insert(std::make_pair(1, d));
}
Class-Foo{
模板
boost::无序的地图项目;
模板
boost::无序映射和get(){
退货项目;
}
}
// ....
void main(){
富富,;
类d();
foo.get().insert(std::make_pair(1,d));
}

有什么方法可以做到这一点吗?

是的,通过制作整个
Foo
a类模板:

template<typename T>
class Foo
{
    using items_map_t = std::unordered_map<int, T>;

    items_map_t items;

    items_map_t& get() const
    {
        return items;
    }
};
模板
福班
{
使用项目\u映射\u t=std::无序\u映射;
项目(地图)项目;;
项目映射获取()常量(&t)
{
退货项目;
}
};

您为什么需要为此制作一个类?映射已经可以很容易地返回值了,那么为什么要创建一个包含映射的类呢?如果您想实际修改该类,则需要返回一个引用,或者只需更改copy@meneldal因为对于每个foo实例,它都应该是自己的无序映射。我想如果您真的需要一组任意类型,可以使用类型擦除(以及映射映射)是一个函数声明。您的foo类使得访问映射更加不方便。我不想让整个foo类成为一个函数声明template@ZilbermanRafael那么如何实例化
items
成员变量?您还不能拥有模板成员变量(或模板变量),尽管它是随建议的标准提供的,但我不知道它将如何(或是否)与成员变量一起工作。