C++プログラマ キャスブログ
[C++11]ラムダ式で再帰 2014年12月09日21:54:59
ラムダ式単独で再帰を表現できるのでサンプルコードをご紹介します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <cstdio> // printfに必要なヘッダー #include <functional> //std::functionに必要なヘッダー int main() { // 階乗を計算する再帰ラムダ式 std::function<int(int)> factorial = [&factorial](int i) -> int { if( i == 1 ) { return 1; } return i*factorial(i-1); }; printf( "%d\n", factorial(5) ); return 0; }
出力: 120
ラムダ式単独で再帰が表現できて非常に便利ですね! 面白い点は、自分自身をキャプチャに指定できてしまう所だと思います。 注意点は、ラムダで再帰を行う際には型解決の問題でauto変数に代入出来ないので 必ずstd::functionを経由しなければならない点です。 autoにするとコンパイルエラーになります。 auto変数についての説明はこちら [C++11]auto変数を使おう!ただし慎重に... ラムダ式についての説明はこちら [C++11]ラムダ式(無名関数、匿名関数)とstd::function
[C++]型を自在に変換~キャスト演算子のオーバーロード~ 2014年12月05日11:45:05
キャスト演算子のオーバーロードを行っておくと必要な型に応じて 暗黙的にキャストを行ってくれます。 自在に好きな型へと変換でき便利です。 乱用すると黒魔術化するのでご利用は計画的に! 異論があるかもしれませんが、筆者はこの機能が大好きです。 書き方: operator 型() 修飾子 この機能を利用して参照を返す事は可能ですが暗黒面に足を踏み入れる トリッキーなコードになってしまいますので参照の利用は控えた方がいいと思います。 ※ただし読み取り専用のconst参照であればいいと考えます。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 #include <cstdio> // printfに必要なヘッダー #include <string> // stringに必要なヘッダー // 整数クラス class Integer { private: int m_Int; public: Integer(int i = 0) { m_Int = i; } // intキャスト演算子のオーバーロード operator int() const { return m_Int; } // doubleキャスト演算子のオーバーロード operator double() const { return (double)m_Int; } // std::stringキャスト演算子のオーバーロード operator std::string() const { char buffer[16] = {}; sprintf( buffer, "%d", m_Int ); return buffer; } }; void Print( int i, double d, const std::string& s ) { printf( "int=%d, double=%f, string=%s\n", i, d, s.c_str() ); } int main() { Integer integer = 10; int i = integer; // intキャスト演算子が呼ばれる double d = integer; // doubleキャスト演算子が呼ばれる std::string s = integer; // std::stringキャスト演算子が呼ばれる // 変数を出力 printf( "int=%d, double=%f, string=%s\n", i, d, s.c_str() ); // 手動で呼ぶ場合はキャストすればよい printf( "int=%d, double=%f, string=%s\n", (int)integer, (double)integer, ((std::string)integer).c_str() ); // 関数に渡す時も自動でキャストしてくれます。 Print( integer, integer, integer ); return 0; }
出力: int=10, double=10.000000, string=10 int=10, double=10.000000, string=10 int=10, double=10.000000, string=10
これを利用すると見た目が非常にすっきりしコンパイラの警告を 抑止する為だけに行っていたキャストを省略することができます。 To○○系の変換メソッドを作成してもよいのですがキャスト演算子の使用も 便利だと思いますので状況に応じてご判断下さい。 キャスト演算子のオーバーロードはテンプレートも使えます。
テンプレートを用いたサンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 #include <cstdio> // printfに必要なヘッダー #include <string> // stringに必要なヘッダー // 整数クラス class Integer { private: int m_Int; public: Integer(int i = 0) { m_Int = i; } // テンプレートを利用したキャスト演算子のオーバーロード template <class T> operator T() const { return (T)m_Int; } // std::stringキャスト演算子のオーバーロード operator std::string() const { char buffer[16] = {}; sprintf( buffer, "%d", m_Int ); return buffer; } }; int main() { Integer integer = 65; printf( "char=%c short=%d int=%d, float=%f double=%f, string=%s\n", (char)integer, (short)integer, (int)integer, (float)integer, (double)integer, ((std::string)integer).c_str() ); return 0; }
出力: char=A short=65 int=65, float=65.000000 double=65.000000, string=65
[C#]起動時に非表示のFormの作り方 2014年12月04日23:59:01
優秀な後輩がやっていた方法のご紹介です。 Shownイベント時にVisibleにfalseを設定すると起動時にFormを 非表示にすることが可能です。 コンストラクタやLoadイベント時にVisibleにfalseを指定しても有効になりません。 Application.Run()を使ったり透明度を0にして実現しておられる方も いらっしゃいましたが、私はこの方法が一番しっくりきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 using System; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } // フォームが最初に表示された時に発生します。 private void Form1_Shown(object sender, EventArgs e) { // 非表示設定 Visible = false; } } static class Program { /// <summary> /// アプリケーションのメイン エントリ ポイントです。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } }
カテゴリ

リンク
C++11のコードを
試すのに便利です。
http://ideone.com/

同人ゲームを
製作している知人
sorcery

にほんブログ村 IT技術ブログ C/C++へ
にほんブログ村


C++ ブログランキングへ

ゲームダウンロード DefenceTri