只要它的每个元素都支持,就可以使用boost::fusion
编译时容器fusion_algebra
default_operations
- 与标量 (*) 相乘
- 加法和减法 (+,-)
- 调整大小
基本浮点类型就是这种情况,例如double
, float
,甚至std::complex
。这也适用于支持表达式模板的类型,例如来自MTL、boost::ublas 或 vexcl 和 viennacl 的向量和矩阵类型。但这是不可能的std::vector
,因为向量没有实现或重载适当的 +*-/ 运算符。在这种情况下,您有三种可能性
- 选择支持表达式模板的向量类型
- 实现一个嵌套代数,它用融合迭代融合序列并从子代数中
for_each
调用正确的for_each
- 实现一个迭代融合序列元素的自定义操作。
注意 1:调整大小通常意味着,如果您的类型需要调整大小,则您需要专门is_resizable
针对编译时间进行调整,例如通过
template<>
is_resizable< YourType > : boost::true_type { };
和专业化resize_impl<>
和same_size<>
。查看默认实现。这真的很容易,应该只是一条线。
注意 2:如果您还需要步长控制,并且您选择使用带有表达式模板的向量类型,则运算符/
和函数max
必须存在,并且它们必须执行逐元素除法和逐元素最大值。这可能很难实现。如果您需要帮助,请随时再次与我们联系。