実際にstd::begin(my_vector)
を使用しているのは、ではありません。右足!あなたがカスタマイズポイントをピックアップしたい場合は、むしろ
using std::begin;
using std::end;
std::sort(begin(cont), end(cont));
このアプローチは、適切な版ãを見つけるために失敗した場合、フォールバックがstd::begin
を使用するために、ADLを使用してbegin(cont)
を見つけようとします使用したいです。
悲しいことに、std::begin
のようなカスタマイズポイントのデフォルトであるstd::size
はありません。これはstd::distance()
使用する作業の種類になる:非ランダムアクセスイテレータのために、または、より一般的に典型的なノードベースのコンテナのため、しかし
std::distance(begin(cont), end(cont));
をいうし、格納された値からサイズを取得する要素を歩くことになる。このアプローチ。したがって、cont.size()
に電話したいと思うでしょう。適切なカスタマイズポイントを定義するために比較的簡単であろう:としては、コメント欄で指摘された
namespace util {
template <typename C>
typename C::difference_type size(C const& c) {
return c.size();
}
template <typename T, std::size_t N>
std::size_t size(T const(&)[N]) {
return N;
}
}
、非メンバsize()
機能working paper for C++17に添加した(24.3 [イテレータの概要の下を参照します。 synoposis])。 N4280は変更を提案した論文です。この論文では、また追加された機能empty()
とdata()
を提案しています。これらの関数はすべて<iterator>
で宣言されています。
C++ 17に追加されたバージョンでは、size()
メンバーの返品タイプに直接decltype()
が使用されています。それに加えて、constexpr
する関数を宣言します:
template <typename C>
constexpr auto size(C const& c) -> decltype(c.size()) {
return c.size();
}
あなたがあなた自身のテンプレート 'サイズ()'関数を、ローリング試してみて、生のCスタイルの配列のために専門性があります。 –
std :: sizeしかしC++まで17 – exs
C++で 'std :: size(my_vector)'を得ることができます。今は何もありません。 –