使用stl容器实现traits

时间:2015-07-17 13:30:07

标签: c++ stl containers traits

我有一个关于使用stl容器实现traits的问题。

我有一些代码可以使用不同的对象(在我的情况下使用张量)并且我没有直接访问张量类(例如当我使用外部张量库时)。我试图通过特征来实现张量的所有必要属性。

例如,我有一个模板类,它应该适用于张量:

template<typename Traits>
class Operator{
  typedef typename Traits::state_t state_t;
  .........
};

这意味着对于特定的张量类型,我应该指定它自己的特征类型。例如,对于SomeTensor我做了:

class SomeTensorTraits{
  typedef SomeTensor state_t;
  .........
};

当我想使用其他张量类型时,我只写下另一个特征:

class OtherTensorTraits{
  typedef OtherTensor state_t;
  .........
};

然后我在相同的Operator代码中使用不同的张量类型,它可以正常工作。

当我想要收集不同的张量到某个stl容器(例如std :: vector)时,问题就开始了。我提醒你,我无法访问张量课程(因此我无法从一些基类中获取张量),而且我也不想在容器中收集TensorTraits。 / p>

因此问题是如何通过在辅助特征中实现张量来收集不同的Tensor个对象?

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以使用boost::any来封装对象。 其他方式(更脏)是使用涵盖所有情况的联合。

您也可以创建IOperator类,从中派生并使用vector<IOperator&>来存储引用。

答案 1 :(得分:0)

我认为您需要具有专业化的通用特征:

template<typename T>
struct TensorTraits;

template<>
struct TensorTraits<SomeTensor>;
{
    using state_t = SomeTensor;
    // ...
};

template<>
struct TensorTraits<OtherTensor>
{
    using state_t = OtherTensor state_t;
};