Ссылка на член члена в шаблоне - PullRequest
3 голосов
/ 27 июля 2010

Я использую 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 ]

2 голосов
/ 27 июля 2010

Время от времени всплывают вопросы об этой функции, поскольку это действительно очень логичная вещь.Но, к сожалению, это не часть языка.

См. Также эту ветку Запрещен ли элемент указатель на "внутреннюю структуру"?

1 голос
/ 27 июля 2010

Вы можете обойти это с помощью подходящего метода в Bar

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> >
0 голосов
/ 27 июля 2010

Вы можете написать определяемый пользователем экстрактор ключей , который выполняет эту работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...