2015-02-13 6 views
3

Scott Meyers, Herb Sutter и others выступают за функции, не являющиеся членами, над функциями-членами. И с дополнениями, такими как std::begin, std::cend и т. Д., Кажется, что STL движется в этом направлении. Если это так, почему нет std::size?Почему нет std :: size?

Я предполагаю, потому что это достаточно, чтобы определить свою собственную версию легко:

namespace std { 
    // C++14 
    template <typename C> 
    decltype(auto) size(const C& c) 
    { 
     return distance(cbegin(c), cend(c)); 
    } 
} 

Или я что-то отсутствует? т.е. существует ли причина не для использования не являющегося членом size?

+7

[Сейчас] (https://isocpp.org/files/papers/n4280.pdf) (ну, не совсем сейчас). [Только что проголосовали в рабочем документе в ноябре прошлого года] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4251.html) (см. LWG motion 20). –

+3

Я также должен указать, что мой пример 'std :: size' не очень хорош! – Daniel

+0

Вы пропустили очевидную поддержку 'T [n]', да. – MSalters

ответ

4

Почему нет std::size?

Поскольку никто не написал предложение к моменту его включения в C++ 14. The first draft of the proposal to add it датировано маем 2014, а после того, как стандарт C++ 14 был разослан для его последнего тура голосования в феврале 2014 года

A revised version предложения было voted into the C++ working paper на последнем заседании Комитета в ноябре (см движение ПРГ 20) , поэтому вполне вероятно, что вы увидите это в следующей редакции стандарта (C++ 17?), а также std::empty() и std::data().

Смежные вопросы