【发布时间】:2015-07-17 13:30:06
【问题描述】:
我有一个关于使用 stl 容器实现特征的问题。
我有一些代码可以处理不同的对象(在我的例子中是张量),我无法直接访问张量类(例如,当我使用外部张量库时)。我试图通过特征来实现张量的所有必要属性。
例如,我有一个应该与张量一起使用的模板类:
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。
因此问题是如何通过在辅助特征中实现张量来收集不同的Tensor 对象?
感谢您的帮助。
【问题讨论】:
-
您是在问如何将不同类型存储在同一个向量中?没用。
-
也许
boost::variant<SomeTensor,OtherTensor,etc>; -
感谢您的回答。不,我不问如何在向量中存储不同的类型。我问如何编写一些包装器或技巧如何在没有直接访问类型的情况下避免它。使用
boost::variant是不行的,因为在这种情况下,通过添加新的张量类型,你应该用容器重写类。
标签: c++ stl containers traits