2015-10-01から1ヶ月間の記事一覧
前回の記事の続きですが、作ったアダプタを例えば範囲クラスrangeに適用してみたいと思います。今回は簡単のためイテレータを実装せず、getメンバ関数でrangeを0から順番に回していきます。しかも範囲チェックはしていません。 Step1 まずはアダプタがない状…
関数をどんどん適用できるAdaptorを考えます。 背景 ある関数fがあって、それに対してさらに関数gを適用した関数h = g(f)を考えます。これをC++で表現するというのがこの記事の目的です。ところでどうしてそんなことが必要なのかというと、LINQ for C++を自…
scope_exitでは、その変数を定義したスコープを抜けたときの処理を記述できるように実装しましたが、抜けた時に処理をしないようにする、あるいは処理を延期できるようにすることを目標にmovable_scope_exitを実装しました。ポイントはAnyクラスの実装とほぼ…
SQLite3 数あるSQLアプリケーションの中でもダントツで早く! 簡単に! 使えるものです。まずはじめにC++(というかC言語)で利用するために適当なデーターベースを作っておきます。test.dbとしてファイルを保存しました。なんでもいいです。続いてテーブルを作…
スコープを抜けたら何らかの処理を実行する物を作りました。 使用例 C* p = new C(1, 2); auto s = mytools::make_scope_exit([&p]() { delete p; }); 実装 template <typename Func> class scope_exit { public: scope_exit(Func func) : func(func) {} ~scope_exit() { fu</typename>…
Anyを実装しよう Any型とは 何でも格納できる型を作ることを考えます。普通はそんな型は必要ないし、当然その分オーバーヘッドが生じてしまうので利用する箇所は限られるだろうけどコンテナに格納するなどして便利なことはあるにはあります。 実装方法 Step1…
以前作ったOptionalにちょっと機能を付け足しました : operator()(Arg...)にて再配置newによって再構築可能としました。これにより不要なコピーのオーバーヘッドがなくなります。 コンストラクタとデストラクタが同数呼び出されるように修正しました。コンス…
PHP の new 演算子とメソッドチェイン:Rainy Day Codings:So-net blog C++ ですらできる(でもメモリリークします)。 #include <iostream> class Foo { public: void method() { std::cout << "hello!\n"; } }; int main(int, char*[]) { new Foo()->method(); retu</iostream>…
#pragma once #include <vector> #include <memory> namespace mytools { template <typename T> class FixedVector { template <typename T> struct Storage { Storage(size_t size) : buffer(new T[size]), next(nullptr) {} ~Storage() { delete[] buffer; delete next; } T* buffer; Storage<T>* nex</t></typename></typename></memory></vector>…