C++

Boost.勉強会に参加してきました!

12/12に開催されたBoost.勉強会に参加してきました。 当日は会場も広く、非常にいい環境だったと思います。 ネット接続については、wifiに繋ぐのに乗り遅れて、外向けのセッションを張れなくなってしまったので(ルータの上限数?) N82でテザリングしてつぶ…

ユーザ定義変換演算子の戻り値型について

C++

どうやらC++の変換演算子(operator ClassName())は、コンパイル時に戻り値の型をチェックしないっぽい。例えば、 //BからAへの暗黙の型変換 struct A { }; struct B { operator A() { return A(); } }; int main() { A a; B b; a = b; } 上のコードは普通の…

コンストラクタの明示的呼び出し

C++

VCでは #include <iostream> class A { public: A(int i) : m_i(i){} A(const A& obj) : m_i(obj.m_i){} int m_i; }; int main() { A a(10); std::cout << a.m_i << std::endl; a.A::A(20); std::cout << a.m_i << std::endl; A b(30); a.A::A(b); std::cout << a.m_i <</iostream>…

ポインタ型宣言時の書き方について

C++

この前どこかでポインタ型宣言の書き方が int* a;//C++な人 int *b;//Cな人 になってること多いよね。みたいなエントリを見たのでちょっとこれについて。 (たぶんRSSリーダーかtwitterのリンクから飛んだんだけど消息不明に。知ってる人いたらアドレス教え…

コンパイラ電卓

C++

すごく実用性のないものを作った #include <iostream> //a + b template <int a,int b> struct Adder { enum {value = a + b }; }; //num! template <int num,int unused> struct Factor { enum {value = num * Factor<num - 1,unused>::value}; }; template <int unused> struct Factor<0,unused> { enum {value = 1}; }; template </int></num></int></int></iostream>

組み込み型の一時オブジェクトは変更不可らしい

C++

Exceptional C++を読んでたら "C++ language doesn't allow you to modify temporaries of builtin type." (適当訳:組み込み型の一時オブジェクトは変更不可) という一文があったのでいろいろ試してみた。 まず int func1() { return 1; } int main() { s…

boost::bindが返してくるファンクタ

boost::bindが返してくるファンクタの引数を過剰に与えるといらない部分は無視されるらしい(というか過剰に渡しても普通に動く) #include <iostream> #include <string> #include <boost/bind.hpp> struct Functor { typedef void result_type; result_type operator()(std::string message){</boost/bind.hpp></string></iostream>…

仮想関数のアクセス指定子

C++

どうやらC++はオーバーライドする際にアクセス指定子を好きなように書き換え放題らしい 具体的には #include <iostream> class Base { public: virtual void func(){ std::cout << "Base" << std::endl; } }; class Deriverd : public Base { private: virtual void</iostream>…

今度はconceptを使って戻り値指定のいらないbindっぽいことをしてみる

C++

前回のエントリのコメントで、Callable conceptがあるよと教えてもらったので、 昨日書いたdecltypeに続き、conceptで似たことをしてみることにした。 conceptGCCでは、std::Callableを使おうとすると、まだ実装されてないよ。みたいなメッセージが出てくる…

decltypeでboost::bindに渡すファンクタの戻り値を指定できないか頑張る(conceptGCC)

boost::bindは、ファンクタを渡した場合に戻り値の推測することができないので、 std::function系を継承してないファンクタを渡す場合は下のようにファンクタの中で戻り値をresult_typeとしてtypedefするか #include <iostream> #include <string> #include <boost/bind.hpp> struct Functor { </boost/bind.hpp></string></iostream>…

Qt 4.5のビルド

Qt 4.5がリリースされたのでVCでビルド 4.5からライセンスがLGPLになったので、普通はdynamicLinkするんだろうけど 人に実行ファイルを渡すときになかなか面倒なのでstaticでビルド configure -debug-and-release -no-qt3support -static -D _CRT_SECURE_N…

VS2010CTP (VC10) でBoostをビルド

いつも通りbjam(3.1.17)を使ってビルドしようとしたら、どうやらmsvcのバージョン自動識別に失敗していて(たぶんbjamがVC10にまだ対応してない) 上手くいかなかった。生成されたライブラリファイルを見ると、本来ならないといけない libboost_filesystem-v…

混入スタイルの基底クラス

C++

この前Effective C++を読み返していると、テンプレート引数をクラス定義で使っていないのに、 テンプレートクラスになっている物があったので、いろいろ考えた結果、 派生クラス作成時に派生クラス名をテンプレート引数として渡すことによって、 基底クラス…

typedefされた型の取り得る値の取得方法(std::numeric_limits)

C++

ちょっと前に作ってたソフトでtypedefされた型の取り得る最大値、最小値の取得方法がわからなくて困ったのでメモ 例えばint型が取り得る値の最大値、最小値が知りたい場合、C言語的に書くとINT_MAX,INT_MINを参照するのが普通なんだけど OpenGLで定義されて…

VCのインテリセンス2

C++

さっきの記事見直したら上の方に続きのリンクみたいなのがあったので読んでみよう

VCのインテリセンスについての記事

C++

VC++TeamBlogを読んでたらこんな記事がDev10 Is Just The Beginning http://blogs.msdn.com/vcblog/archive/2009/01/27/dev10-is-just-the-beginning.aspx中身は読めばわかると思うけど 要するに今までのインテリセンスがもうメンテナンスできなさそうなひど…

再帰テンプレート

C++

本を読んでいたらテンプレートの特殊化について出てきたので練習がてら再帰テンプレートを使って アッカーマン関数を作ってみた #include <iostream> template<int m,int n> struct ack { enum{ ans = ack<m - 1,ack<m,n - 1>::ans>::ans }; }; template<int n> struct ack<0,n> { enum{ ans = n + 1 }; }; tem</int></m></int></iostream>…