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() { 
    Foo foo; 
    SomeClass d(); 
    foo.get<SomeClass>().insert(std::make_pair(1, d)); 
} 

有没有办法做到这一点?

+0

为什么你需要做一个类是什么?地图可以很容易地返回你的值,所以为什么要创建一个包含地图的类?如果你想实际修改类,你需要返回一个引用,或者你只需​​要更改副本 – meneldal

+0

@meneldal因为对于每个富实例应该是它自己的unordered_maps –

+0

我想有可能使用类型擦除(和地图的地图) - 如果你真的需要一组任意的类型。 – dyp

是,通过使整个Foo类模板:

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; 
    } 
}; 
+0

我不想让整个foo类成为模板 –

+1

@ZilbermanRafael那么'items'成员变量将如何实例化?尽管它与建议的[C++ 14](http://en.wikipedia.org/wiki/C%2B%2B1y#Variable_templates)一起提供,您仍然不能拥有模板成员变量(或模板变量)标准,但我不知道如何(或如果)它将与成员变量一起工作。 –