我有一个关于使用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
个对象?
感谢您的帮助。
答案 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;
};