Template

meta-daouble - コンパイル時浮動少数

id:Cryoliteさんとこに面白そうな話題みっけ。 http://d.hatena.ne.jp/Cryolite/20050621 さすがにBoostML追うほどの時間はないので 深く間で掘り下げることはできないですが 以前に多倍長整数をやったときにdouble型を 即値でぶっこめないかなぁと思ってま…

インラインアセンブラとテンプレート引数

まったくたいしたことじゃないんだけど C++でテンプレートクラスなり関数なり使ったときに インラインアセンブラを使って引数を使うとコンパイラに怒られる template void f() { _asm { mov eax,dword ptr[n] } }そりゃそうだ。大体コンパイラはテンプレート…

Mpl風味POW

template <unsigned long Val,unsigned long n,unsigned long s> struct SPow { enum { Value=SPow<Val*(n&1?s:1),n>>1,s*s>::Value }; }; template <unsigned long Val,unsigned long s> struct SPow<Val,1,s> { enum { Value=Val*s }; }; template <unsigned long Val,unsigned long s> struct SPow<Val,0,s> { enum { Va…</val,0,s></unsigned></val,1,s></unsigned></val*(n&1?s:1),n></unsigned>

即席構造体

#include //なんとなくstaticチェック template struct StaticAssert { };template <> struct StaticAssert;template struct MemberLink;#define MEM_LINK2(a,b) MemberLink #define MEM_LINK3(a,b,c) MemberLink #define MEM_LINK4(a,b,c,d) MemberLink//n…

さらに追記

id:ototoiさんに指摘していただいたように const Item&型メンバをconst T&型メンバに変更してみました。 このやり方だとconst T型、つまり値でもいけるみたいです。逆にメンバじゃなく演算子関数の引数のほうでは値は使えません。 const ItemのようなReferen…

追記

あぅ・・CRTPだとreferenceにしないとスライシングがあ;; 意味ないじゃん><

おととひさんのためになるお話(id:ototoi:20041126)を忘れないように・・ついでにETの土台をつくってみる #include template struct Item { const T& Self() const { return static_cast(*this); } };template struct Plus:public Item { Plus(const Item& t…

Singleton

最近ぱせりが使ってるシングルトン template struct Singleton { typedef T SingletonType; static T& Instance() { if(!mInstance) { mInstance = new T(); ::atexit(DestroySingleton); } return *mInstance; } private: static void DestroySingleton() {…

軽くネタをいっちょ void f(int i) { }template void f(T t) { }void invoke() { int i=0; f(i); } まぁ普通にvoid f(int)が呼ばれます。 関数のオーバーロードでテンプレートと非テンプレートがある場合 非テンプレートが優先します。 で、これをなんとかテ…

Factory改造計画1

LokiにFactoryと言うクラスがありますが、私はこれがめっちゃ好きでよく使ってます。 たとえばシリアライズクラスやリモートプロキシクラスのオブジェクト生成部分とか 果てはゲームなどのシーンの生成やいろんなファイルフォーマットのリードオブジェクトの…

自前仮想関数

前回やったのは継承関係が2段以上になると動かなかったのですがそれじゃああまりにもひどいので多重継承や継承関係を加味した修正をしてみました。違いはというとBase*とDerived*の両方のTypeInfoをMapに登録することで、実行時に目的の型にするためのCaster…

Cryさん(id:Cryolite:20040714)がTypedefTemplatesについて書いてくれたので、私もその話題に乗せてもらうことに・・・こういうのはトラックバックってのをしたほうがいいのかもしれないけど、ブログの何たるかを知らないぱせりは、もちろんトラックバックの…

昨日やった自前仮想関数のよーな仕組みはCRTPを使うとシンプルにできる場合が多い。まあ、とにかくソース。 #include "stdafx.h" #include <Jam/Type.hpp> #include <iostream> #include <map> using namespace std; using namespace jam; template <typename Base> void FInvoker(Base pd) { ToExact(pd)</typename></map></iostream></jam/type.hpp>…

自前仮想関数?

boostのSerializeで基底ポインタが渡されたときに、ちゃんと派生クラスの関数がよばれる。それも仮想関数じゃないのに。で、その辺はRTTIをつかってゴリゴリやってるんだけど勉強がてら真似てみる。ちなみにこの辺の仕事をこなしてるのはSerializationのvoid…

http://boost-consulting.com/mplbook/みんなはやいな・・

クラスの構成

あるクラスにT型のメンバを持たせたい。なのでT型を渡すクラステンプレートにしてみる。 template class X { T t; };これはこれでいいのかもしれない。ただ、Tじゃなくてstatic Tにしたいなんてことはよくある。もしかしたらシングルトンにしたくなるかもし…

クラスの構成(2)

こーいうローカルクラスを作ってあげるとうまくいく。ローカルクラスは含まれているクラスの名前で修飾されるから違うクラスに含まれるローカルクラスは違うクラスになるのだ。とりあえずソース。 template <typename T> struct Monostate{}; class A { static int mCoun</typename>…

PETE

PETEライブラリがリンク切れてるなあ・・どっかにうつったのかな。

CRTPと型の修飾の説明を書いてみました。http://mulberryl001.ddo.jp/~paserry/この辺うまく使うと仮想関数を使わなくてすむので一度整理しようとおもってましたけどテンプレートなメタプログラミングが絡むと説明しにくいなあ

boost::serialize

最近ちょっと昔書いたSerializeクラスをリファクタリングしようと設計から見直しております。でもいまいち方針がきまらない。 ExpressionTemplate,RCTP,MPL・・ 割と最近っぽい技術の導入も考えてみるも、大して便利になるようなアイデアがパセリにはでない…