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));
}
有没有办法做到这一点?
答
是,通过使整个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)一起提供,您仍然不能拥有模板成员变量(或模板变量)标准,但我不知道如何(或如果)它将与成员变量一起工作。 –
为什么你需要做一个类是什么?地图可以很容易地返回你的值,所以为什么要创建一个包含地图的类?如果你想实际修改类,你需要返回一个引用,或者你只需要更改副本 – meneldal
@meneldal因为对于每个富实例应该是它自己的unordered_maps –
我想有可能使用类型擦除(和地图的地图) - 如果你真的需要一组任意的类型。 – dyp