В одной из своих последних бесед Херба Саттер рекомендовал предпочесть шаблоны свободных 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- После большой поддержки аннотаций 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>