きままにブログ

プログラミングを主とした私のメモ帳です。寂しいのでコメントください笑

2015-10-01から1ヶ月間の記事一覧

rangeクラスを作り、アダプタを適用していく例

C++

前回の記事の続きですが、作ったアダプタを例えば範囲クラスrangeに適用してみたいと思います。今回は簡単のためイテレータを実装せず、getメンバ関数でrangeを0から順番に回していきます。しかも範囲チェックはしていません。 Step1 まずはアダプタがない状…

関数の合成を保存し、実行する

C++

関数をどんどん適用できるAdaptorを考えます。 背景 ある関数fがあって、それに対してさらに関数gを適用した関数h = g(f)を考えます。これをC++で表現するというのがこの記事の目的です。ところでどうしてそんなことが必要なのかというと、LINQ for C++を自…

scope_exitをmoveできるようにしたmovable_scope_exitを実装

C++

scope_exitでは、その変数を定義したスコープを抜けたときの処理を記述できるように実装しましたが、抜けた時に処理をしないようにする、あるいは処理を延期できるようにすることを目標にmovable_scope_exitを実装しました。ポイントはAnyクラスの実装とほぼ…

SQLite3のテストだよ!

SQLite3 数あるSQLアプリケーションの中でもダントツで早く! 簡単に! 使えるものです。まずはじめにC++(というかC言語)で利用するために適当なデーターベースを作っておきます。test.dbとしてファイルを保存しました。なんでもいいです。続いてテーブルを作…

scope_exitの実装

C++

スコープを抜けたら何らかの処理を実行する物を作りました。 使用例 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型の実装

C++

Anyを実装しよう Any型とは 何でも格納できる型を作ることを考えます。普通はそんな型は必要ないし、当然その分オーバーヘッドが生じてしまうので利用する箇所は限られるだろうけどコンテナに格納するなどして便利なことはあるにはあります。 実装方法 Step1…

Optional

C++

以前作ったOptionalにちょっと機能を付け足しました : operator()(Arg...)にて再配置newによって再構築可能としました。これにより不要なコピーのオーバーヘッドがなくなります。 コンストラクタとデストラクタが同数呼び出されるように修正しました。コンス…

古い日記に言及, メソッドチェーン

C++

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>…

簡易メモリアロケータのunique_ptrを返す実装

C++

#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>…