copy

MC++D を最初に読んで感動した Copy に関するくだりを(やっと)実装してみた。BitBlast とかいう、謎の API の替わりに std::mecpy で。これだけでも、かなり使えるとおもうんだけど。標準コンテナとPODの両方気にせず同じ Syntax で書けるのは精神的に良いです。

PODだと

struct POD;
POD src[N], dest[N];
Nevil::Copy(src, &src[N], dest);

標準コンテナだと

std::list<foo> src, dest
Nevil::Copy(src.begin, src.end, std::back_inserter(dest));

標準コンテナ用に template 関数をでっちあげて

namespace Navil {
template <class SrcContainer, class DestContainer>
void
Copy(const SrcContainer& src, DestContainer& dest)
{
  Copy(src.begin(), src.end(), std::back_inserter(dest));
}
} // namespace

こんなにすっきり

std::list<foo> src, dest
Nevil::Copy(src, dest);

ざっと UnitTest したみたけど、書籍の通りの内容で問題なさそうだなぁと。