Boost Fusion/MPL:将类型从序列转换为等效的 any_range 序列
我想使用 Boost 的 any_range
来处理多个异构数据范围。我的数据范围的类型称为融合向量,例如:
typedef vector<double, int, char> TypeSequence
给定这样一个类型,我想编写一个模板来派生进一步的类型,如下所示:
vector<AnyRange<double>::value, AnyRange<int>::value, AnyRange<char>::value>
其中 AnyRange
定义为:
using namespace boost;
template <typename T>
struct AnyRange
{
typedef typename any_range<typename T, forward_pass_traversal_tag, int, std::ptrdiff_t> value;
};
I'我尝试过但失败了。 Fusion 可以做到这一点吗?多普勒?或者也许我正走在 any_range
的错误道路上。
I want to use Boost's any_range
to handle multiple heterogeneous data ranges. The type of my data ranges is known as a Fusion vector, for example:
typedef vector<double, int, char> TypeSequence
Given such a type, I want to write a template to derive a further type like this:
vector<AnyRange<double>::value, AnyRange<int>::value, AnyRange<char>::value>
where AnyRange
is defined as:
using namespace boost;
template <typename T>
struct AnyRange
{
typedef typename any_range<typename T, forward_pass_traversal_tag, int, std::ptrdiff_t> value;
};
I've tried and failed. Is this even possible with Fusion? MPL? Or perhaps I'm heading down the wrong path with any_range
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用 boost::mpl::transform,您可以将其与 Fusion 序列一起使用(只要您包含适当的标头以使 Fusion 序列表现为确认 MPL 序列):
如果需要,您可以将转换成它自己的元函数:
You can do this easily using boost::mpl::transform, which you can use with Fusion sequences (as long as you include the appropriate headers to make Fusion sequences behave as confirming MPL sequences):
If you want, you can put the transformation into its own metafunction: