一个应用程序需要处理一组可以执行某些操作的数据集。每个数据集包含一个特定数据类型(int32、int16、float、complex)的点数组,并且可以对每个数据集中包含的数据执行相同的操作。例如傅立叶变换或滤波器。因此,在数据模型(在model-view-controller模式中使用)中,我希望存储开放数据集的集合,每个数据集都有自己的数据类型。
在How to put different template types into one vector之后,可以使用继承或boost变量来放置具有不同类型参数的模板类。
我希望避免使用变量,并且希望保留值类型。
我想要的是用不同的模板参数存储类的向量(如果可能的话,数组会更好):
template < typename T >
class DataSet {
private:
T data;
// ...
public:
T getData() {return data;}
};
std::vector< DataSet< something > > v;
v.push_back( DataSet<int32_t*>() );
v.push_back( DataSet<float*>() );
v.push_back( DataSet<int16_t*>() );做这件事的正确方法是什么?或者处理具有不同值类型的对象集合,我可以在这些对象上执行相同的操作?
发布于 2014-07-30 18:28:44
如果有一个固定的范围,你可以使用boost::variant,否则考虑使用boost::any。
发布于 2014-07-30 18:27:12
你可以这样做:
struct Base {};
template <class T> struct Data : public Base { T x; };
vector<Data*> elements;
elements.push_back(new Data<int>{3});
elements.push_back(new Data<char>{'a'});使用指针的原因是所有向量元素必须具有相同的大小,因此我们不能直接存储对象,而是被迫使用指针。然后可以使用typeid查询元素的类型
`if (typeid(*elements[0]) == typeid(Data<int>))`不过,这种方法会招致运行时惩罚,就像使用boost变体一样。如果事先知道每个字段的类型,那么明智的做法是使用tuple。
https://stackoverflow.com/questions/25034400
复制相似问题