- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
#include <iostream>
#include <boost/fusion/mpl.hpp>
#include <boost/fusion/include/mpl.hpp>
#include <boost/fusion/container/set.hpp>
#include <boost/fusion/include/at_key.hpp>
#include <boost/fusion/include/as_set.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/set.hpp>
#include <boost/mpl/front.hpp>
#include <boost/mpl/fold.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/mpl/insert.hpp>
struct node_base
{
int get() {return 123;}
};
struct node_a : public node_base
{};
struct node_b : public node_base
{};
struct node_c : public node_base
{};
typedef boost::mpl::vector3<
::boost::mpl::vector1<node_a>
,::boost::mpl::vector1<node_b>
,::boost::mpl::vector1<node_c>
>::type nested_vec_type;
typedef ::boost::mpl::fold<
nested_vec_type
, ::boost::mpl::set<>
, ::boost::mpl::insert<
::boost::mpl::placeholders::_1
, ::boost::mpl::front<::boost::mpl::placeholders::_2>
>
>::type restored_set_type;
typedef ::boost::fusion::result_of::as_set<restored_set_type> restored_fusion_set;
restored_fusion_set my_restored_set;
int main()
{
std::cout << boost::fusion::at_key<node_a>(my_restored_set).get() << std::endl;
std::cout << boost::fusion::at_key<node_b>(my_restored_set).get() << std::endl;
std::cout << boost::fusion::at_key<node_c>(my_restored_set).get() << std::endl;
return 0;
}
error C2039: 'category' : is not a member of 'boost::fusion::result_of::as_set<Sequence>'
error C2039: 'type' : is not a member of 'boost::fusion::result_of::end<Sequence>'
error C2504: 'boost::fusion::extension::end_impl<Tag>::apply<Sequence>' : base class undefined
error C2039: 'type' : is not a member of 'boost::fusion::result_of::begin<Sequence>'
error C2504: 'boost::fusion::extension::begin_impl<Tag>::apply<Sequence>' : base class undefined
error C2065: 'type' : undeclared identifier
从简单的 mpl 序列(如::boost::mpl::vector< node_a, node_b, node_c >)到融合序列的转换工作正常。但是当我尝试将经过后处理的 mpl 序列从复杂的 mpl 序列(如嵌套的 mpl vector )转换为融合序列(通过 result_of::as_set 或 as_vector)时出现编译时错误。
“restored_set_type”的打印输出是:
struct node_c
struct node_b
struct node_a
,但它似乎丢失了一些类型信息,这使得它不同于简单的 mpl 序列::boost::mpl::vector< node_c, node_b, node_a > 。
我是否遗漏了任何需要指定的内容,例如标签、大小或?谢谢!
最佳答案
解决方案比最初看起来要简单得多! :)
你错过了一些关键的东西:
typedef ::boost::fusion::result_of::as_set<restored_set_type> restored_fusion_set;
不正确,你需要的是:
typedef ::boost::fusion::result_of::as_set<restored_set_type>::type restored_fusion_set;
您只是错过了 ::type
因此 restored_fusion_set
的类型实际上是 as_set<restored_set_type>
- 这不是必需的。
关于c++ - 从复杂(嵌套)mpl 序列转换而来的 boost::fusion::result_of::as_set(或 as_vector),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6601296/
我没有什么好的解决办法。我有一段代码: #include #include #include #include #include #include #include #include
当 Callable 返回模板类型并收到以下错误 (clang++) 时,我正在尝试使用 result_of。我还提供了一个一切正常的简单案例。 错误: main.cpp:22:50: note: c
#include using namespace std; struct asd{ void f(); }; int f(); typedef typename result_of::typ
以下代码无法在 GCC 5.2 中编译: template result_of_t FuncCall(const FuncType &f, ArgTypes&... args) { retur
我正在尝试创建一个可延迟的调用对象。类似于(伪代码): template struct delayable_call { return-type-of-FN call(); //
这个问题在这里已经有了答案: Where and why do I have to put the "template" and "typename" keywords? (8 个答案) 关闭 7
我正在尝试在仿函数上使用 std::result_of。为什么我会得到这些结果? #include struct my_logical_not { template bool ope
这个问题我已经有一段时间了。假设我们有一个人为的功能: template std::result_of_t(???)> transform(F&& f) { static const int
通过 result_of 确定诸如 -int() 或 double()*double() 之类的结果的正确语法是什么? 失败 std::result_of::type std::result_of::
我想获得 std::make_tuple 为给定参数包返回的类型。到目前为止,我已经编写了以下代码: #include #include template struct unwrap_refwr
auto lambda = [](){ return 7; }; std::result_of::type val = lambda(); // 'val' : illegal use of typ
我听说 tr1::result_of 在 Boost 中被频繁使用...我想知道是否有 tr1::result_of 的任何好的(简单)用例我可以在家里使用。 最佳答案 result_of 的描述在
#include #include double f(int i) { return i+0.1; } struct F { public: dou
在 this answer我创建了一个类型特征: template using to_string_t = decltype(to_string(declval())); 这工作得很好,但我最初打算使
我想推断作为模板参数出现的函数的返回类型。考虑以下代码: #include struct Result {}; Result foo() { return Result{}; } template
我在玩游戏时注意到 std::result_of 的这种行为: struct Foo { int operator()(const int&) const { ... } char o
我使用的 HashMap 类型没有将其 KeyType 指定为公共(public)成员,只有 ValueType。检索 KeyType 的一种方法是使用 std::result_of与 HashMap
我认为这段代码是不言自明的,但基本上模板函数 ExecFunc 应该能够执行另一个函数并返回其结果。我知道我可以使用 decltype 而不是 result_of 获得类似的结果,但这个问题是为了理解
我向现有类添加了一个重载方法,这现在会导致我们的单元测试出现编译错误。 我已经用以下代码复制了这个问题: #include #include class Foo { public:
g++ -std=c++0x'ing std::result_of 后产生以下错误消息 error: ‘result_of’ in namespace ‘std’ does not name a ty
我是一名优秀的程序员,十分优秀!