Как обеспечить свободное начало/конец функций для ваших собственных типов

В одной из своих последних бесед Херба Саттер рекомендовал предпочесть шаблоны свободных begin (контейнер) end (контейнер) функций container.begin () . Мне нравится, потому что эти функции могут быть предоставлены для всех итерабельных типов, которые не приходят с методами begin ()/end (). Поскольку большинство моих доменных классов имеют интерфейсы, которые говорят на языке домена и не используют общие имена, такие как начало/конец, теперь я могу предоставить итеративный интерфейс, совместимый с контейнерами STL, и базу диапазона для циклов, не нарушая интерфейс основного класса. Мне интересно, какой лучший способ предоставить начальные/конечные функции для моих собственных типов. Моей первой мыслью было сделать это так же, как я делаю с swap и написать функцию в том же пространстве имен, где живет мой тип.

namespace My
{

class Book
{
public:
    typedef std::vector<Page>::const_iterator PageIterator;

    PageIterator FirstPage() const { return begin(pages_); }
    PageIterator LastPage() const { return end(pages_); }

private:
    std::vector<Page> pages_;
};

Book::PageIterator begin(const Book& b)
{
    return b.FirstPage();
}

Book::PageIterator end(const Book& b)
{
    return b.LastPage();
}

}

Можно ли полагаться в ADL здесь, или они должны быть в пространстве имен std? Я думаю, что другой способ - предоставить специализацию в пространстве имен std (перегрузка в std не допускается, верно?). Что лучше всего пути в том, что касается поиска диапазона на основе циклов?

-121--ity4144- Что такое использование faces-config.xml в JSF 2? После того, как JSF 2 большую поддержку аннотаций, мне интересно, для чего бы я использовал faces-config.xml. Какова его важность сейчас? Другими словами, каковы конфигурации, которые можно сделать только...

После большой поддержки аннотаций JSF 2 мне интересно, для чего будет использоваться faces-config.xml . Какова его важность сейчас?

Другими словами, каковы конфигурации, которые могут быть выполнены только через faces-config.xml , а не через аннотации?

В данный момент все, для чего я использую его, это объявить EL-распознаватель Спринга.

<?xml version="1.0" encoding="UTF-8"?>
<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">

    <application>
        <el-resolver>
            org.springframework.web.jsf.el.SpringBeanFacesELResolver
        </el-resolver>
    </application> 
</faces-config>
86
задан BalusC 8 May 2013 в 01:49
поделиться