2014-07-13 25 views
0

我試圖創建通用的變量,像這樣: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

回答

1

是,通過使整個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)一起提供,您仍然不能擁有模板成員變量(或模板變量)標準,但我不知道如何(或如果)它將與成員變量一起工作。 –