代码之家  ›  专栏  ›  技术社区  ›  Kenny Peng

引用模板中成员的成员

  •  3
  • Kenny Peng  · 技术社区  · 14 年前

    boost::multi_index_container 我试图在模板参数中引用一个成员中的一个成员,但不清楚如何做到这一点:

    struct Foo {
        int unique_value;
    };
    
    struct Bar {
        Foo foo;
        double non_unique_value;
    };
    
    // I want to refer to some_value in a template argument:
    multi_index_container<Bar, boost::multi_index::indexed_by<
        ordered_unique< member< Foo, int, &Bar::foo::unique_value > >, // this doesn't work
        ordered_non_unique< member< Bar, double, &Bar::non_unique_value > > // this works
    > >
    

    我该怎么说 unique_value 在模板参数中?我明白为什么我所做的不起作用:我应该传达这一点 Foo Bar 做一些更类似于 Bar::Foo::some_value

    3 回复  |  直到 14 年前
        1
  •  2
  •   Community CDub    7 年前

    关于这个特性的问题会不时弹出,因为它确实是一个非常合乎逻辑的东西。但不幸的是,它不是语言的一部分。

    Is Pointer-to- " inner struct" member forbidden?

        2
  •  1
  •   Aaron McDaid    14 年前

    你可以在酒吧里用合适的方法来解决这个问题

    struct Bar {
        Foo foo;
        double non_unique_value;
        int get_unique_value() const { return foo.unique_value; }
    };
    

    然后使用 const_mem_fun

    ordered_non_unique<  const_mem_fun<Bar,int,&Bar::get_unique_value> >
    
        3
  •  0
  •   Joaquín M López Muñoz    14 年前

    你可以写一个 user-defined key extractor