为什么这类知识与升压:: MPL消失?

我有以下的代码,它工作正常。

#include <boost\mpl\vector.hpp> #include <boost\mpl\fold.hpp> #include <boost\mpl\for_each.hpp> #include <boost\mpl\inherit.hpp> #include <boost\mpl\inherit_linearly.hpp> #include <iostream> using namespace boost::mpl::placeholders; typedef boost::mpl::vector<short[2], long, char*, int> member_types; template <typename T> struct wrap { T value; }; struct print { template <typename T> void operator()(T) const { std::cout << typeid(T).name() << std::endl; } }; typedef boost::mpl::inherit_linearly<member_types, boost::mpl::inherit<wrap<_2>, _1> >::type Generate; void main() { Generate generated; print p; std::cout << static_cast<wrap<int>&>(generated).value << std::endl; boost::mpl::for_each<member_types>(p); }

但如果我修改它是这样的:

struct print { Generate generated; template <typename T> void operator()(T) const { std::cout << static_cast<wrap<int>&>(generated).value << std::endl; } };

我得到的错误错误C2440:'的static_cast':可以从不能转换“常量生成”到“包&'[T = INT]

为什么它在主要的工作,但如果我不把它变成一个模块? 我怎样才能获取数据到一个地方,我可以使用一个类型创建的数据的价值,由一个类型列表驱动模板函数的顺序调用。 基本上,我怎么做一个对象,做一些事两部分有用吗?

--------------解决方案-------------

如果你改变了operator()print到以下,可能是代码可以编译:

struct print {
...
void operator()(T) // remove const

要么

static_cast<wrap<int>const&>(generated) // add const

分类:C# 时间:2015-03-15 人气:0
本文关键词: 模板元编程,升压MPL
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.446 (s). 10 q(s)