2014-05-01から1ヶ月間の記事一覧

HaskellをC++で書いてみる(型クラス)

はじめに お勉強のために Eqを創ってみる 型クラスとは 私は現時点では「Concept」のようだという印象を受けております 「その型(クラス)はどの関数で使用できるのか」とドキュメントであり かつ静的チェッカーの役割を担っているものだと Eqとは? 等価性を…

Variadic Templateの(僕が今更ながら新しく知った)使い方

知った事など 継承させる struct Base1{}; struct Base2{}; // すべての型引数を継承 template<typename... Args> struct Derived : Args... { int a; }; int main(){ Derived<Base1,Base2> a; } mapして包含する(直接保持は無理) struct Base1{}; struct Base2{}; template<typename... Ts> struct holder</typename...></base1,base2></typename...>…

tupleの実装(5.26)

途中経過 http://melpon.org/wandbox/permlink/iKjxuweUPGP5Py9x

tuple<typename T, int N>

C++

tuple_n<int,3>でtuple<int,int,int>になる型エイリアス http://melpon.org/wandbox/permlink/2WpxZNuDV1qNTrX2 使い所不明です</int,int,int></int,3>

map<T,U&>で参照型コンテナ

C++

std::map<T,U&> 知らなかった http://melpon.org/wandbox/permlink/0DxxCiaJpUKWw9nJ</t,u&>

Class Templateでの型推論

C++

function templateの型推論 function templateでは関数呼び出し時の引数によって型が推論されます template<typename T> T pow(T a,T b) return (b!=1) ? a : pow(a*a,b-1); } main(){ int a=3,b=3 pow(a,b); //pow<int>と推論される } class templateの型推論できない? 一方</int></typename>…

typeid().name()の出力

C++

g++ではtype_info::name()で出力される 型名が人類には早すぎる文字列で出力されています #include<iostream> #include<typeinfo> int main(){ std::cout << typeid([](int)->int{}).name() << std::endl; // 型直接渡してもよい std::cout << typeid(int).name() << std::endl; </typeinfo></iostream>…

型安全の世界

最近、boost::any、boost::shard_ptrの実装やBoost.TypeErasureの仕様書などを見て、 構造化され、ネストされた構造体や関数の中に「型安全の世界」があることにようやく気がつき始めました。 (情報科学ではこういうことを学ぶのでしょうか?) 何言ってる…

shared_ptrの便利なところその2

C++

その1はどこ? その1(auto-delete)に関しては私が書く必要がないので省略する 本題 動的ポリモーフィズムをするときに役立つ特性を持っています 生ポインタで動的ポリモーフィズムするときにめんどくさい事 struct Base{}; struct Derived : Base {}; int…

Default template parameter を含んだ場合の class template の部分特殊化

C++

メモ http://melpon.org/wandbox/permlink/E4zsyZ3fo2p9VBYq

クラステンプレートの部分特殊化

C++

部分特殊化したときのtypename Tは何型なのか? // template<typename T> class A { vector<T> v_; }; // 引数がポインタの場合 template<typename T> class A<T*> { vector<T*> v_; }; // 引数がT constの場合 template<typename T> class A<T const> { //vecotr<T const> v_ // これはill-formed vector<T> v_; }; int main() { A<int></int></t></t></t></typename></t*></t*></typename></t></typename>…

プログラミング言語にほしい言語機能

ただの雑感です 最近C++やC#以外の言語を調べているので、その中で「良いな~」と思ったものを 適当にリストアップしてみました switch-caseの亜種 GoやHaxeのswitch-caseは基本的にbreakが要らない仕様になっています わざわざ書かなくても勝手に排他的制御…