【发布时间】:2013-10-29 03:53:04
【问题描述】:
是否有可能以 ANY 方式在 C++11/14 中拥有类型(def)的向量?
我尝试的第一件事是拥有一个基类的向量,并以某种方式从它的派生形式中获取 typedef,但无论我尝试什么都无法让它工作(最不可能)。
伪 C++:
class base
{
/* somehow access 'type' from derived */
}
template <typename T>
class derived : base
{
typedef T type;
}
vector<base*> vec;
vec.push_back( new derived<int> );
vec.push_back( new derived<double> );
vec.push_back( new derived<float> );
vec.push_back( new derived<string> );
for(auto& item : vec)
static_cast< item->type >( /* something */ );
【问题讨论】:
-
不,听起来你需要一个智能指针向量或引用包装器(我会推荐这两者中的前者)。但是您仍然需要知道派生类型才能请求它。
-
您到底想完成什么?我可以毫无问题地做
class SomeClass; typedef SomeClass X; std::vector<X> v;。 -
您是否正在寻找类似Boost.MPL 或Boost.Fusion 的东西?
-
@rwols:这不是我想要的。我需要的是有一个引用不同类型的 typedef 向量。
-
你可以写
using my_types = std::tuple<T1, T2, T3>。然后你可以用std::tuple_element索引它。
标签: c++ reflection c++14