Top/article/Initialize-member-int-variables-at-declaration
English | Japanese
English | Japanese

Menu

  • Top
  • Akihiko Yamaguchi 山口 明彦
  • Project プロジェクト
  • Text テキスト
  • Recent articles 最近の記事
  • Articles 記事一覧 (a to z)
  • Search 検索

Tags タグ †

  • [c++][bash][python][latex][php]
  • [linux][windows][mac][android]
  • [math][algorithm][idea][trick]
  • [liboctave][opencv][git][ros]
  • [setting][bug][general]
↑

Recent articles 最近の記事 †

2019-07-02
  • article/Display-Unix-Time
  • article/Synchronize-Linux-Time-to-Remote
2018-09-27
  • article/python-multimode-singleton
2018-09-02
  • article/rosinstall-git-default-remote
2017-07-28
  • article/SubMenu
2017-03-05
  • article/Import-a-different-version-of-OpenCV-in-Python
2015-08-17
  • article/DRC-finals-2015
2015-01-05
  • article/Upgrade-Android-to-Lollipop
2015-01-01
  • article/Kernel-panic-of-Linux-when-using-Xtion
  • article/Do-not-skip-freeing-data-when-using-tri-mesh-in-ODE
Access: 1/2132 - Admin
These search terms have been highlighted:[c++]

Initialize member int variables at declaration

メンバ整数変数を宣言位置で初期化するテンプレートクラス

[c++][trick]
2010-05-13

クラスや構造体のメンバ変数を初期化するには,コンストラクタに初期化リストを書かなければならない.が,宣言場所と離れてしまったり,同じ変数名を2度(宣言と初期化で)書く必要があって面倒くさかったりする.整数変数しか使えないが,メンバ変数を宣言位置で初期化できる方法を紹介する.

具体的には,整数リテラルをテンプレート引数に持つテンプレートクラスを作る.で,キャストとかを適当にオーバーロードしておけばできあがり.

template <typename t_type, t_type init_value=0>
struct IntInitializer
{
  t_type Entity;
  operator t_type& ()  {return Entity;}  // オリジナルの型にキャスト
  operator const t_type& () const {return Entity;}  // オリジナルのconst型にキャスト
  IntInitializer(void) : Entity(init_value) {}
  IntInitializer(const t_type &i) : Entity(i) {}
};

使い方:

IntInitializer<int,3>  x;  // x は3に初期化される
cout<<x+10<<endl;  // 13
++x;  // operator++(int &) が実行される
typedef IntInitializer<int,10> int10;
int10 y,z;  // いずれも10に初期化される

一応,オリジナルの型で初期化できるようにしてある:

IntInitializer<int,3>  x(10);  // x は10に初期化される

3より10が優先されるのは,コンストラクタ IntInitializer(const t_type &i) が呼ばれるからだ.が,紛らわしいのであまり使わない方がよいだろう.

難点は,整数型しか使えないこと.int, bool, char など以外は使えない(整数リテラルしか,テンプレート型引数に使えない).




Last-modified:2015-01-01 (Thu) 09:21:19 (3833d)
Site admin: Akihiko Yamaguchi.
Written by: Akihiko Yamaguchi.
System: PukiWiki 1.5.0. PHP 5.2.17. HTML conversion time: 0.008 sec.