pstade::oven::at(n)

#include <assert.h>

#include <pstade/oven/at.hpp>

int
main(){
    namespace oven = pstade::oven;
    
    int array[] = {0, 1, 2, 3, 4};
    assert( (array|oven::at(3)) == array[3] );
    
    return 0;
}


内部の動作としては、

 *(boost::begin(range)+n);

こんな感じ。


std::list の様に要素数でアクセスが出来ないコンテナにもアクセスできるのかと思ってやってみましたが。

std::list<int>    array;
array += 0, 1, 2, 3, 4, 5, 6, 7;

// std::list<int>::iterator に + 出来ないのでコンパイルエラー
assert( (array|oven::at(3)) == (3) );

// 直接やってみても無理だった
auto it = array.begin();
int value = *(it + 3);


どうやら、std::list::iterator に + する事が出来ないのでコンパイルエラーになるみたいです。
にょろーん
まぁ、std::string とかでは問題なく使うことが出来るので使い勝手はよさそうです。

std::string    str("THIS IS IT");
assert((str|oven::at(3)) == 'S' );


[pstade]
ver 1.04.3