ANA国内線【PR】
パワーポイントでサイズ変更
パワーポイントでサイズ変更するとき、
Ctrlを押しながらマウスドラッグすると中心を基準にサイズ変更します。
SHIFTを押しながらだと縦横比を変えないでサイズ変更します。
Ctrl+SHIFTだとこの2つの組み合わせ、つまり縦横比を保ったまま中心を基準にサイズ変更します。
# by lesailes | 2004-12-17 16:26 | PPT
Doxygen
自分の作ったライブラリを他人が使うためにマニュアルを作らないといけなくなったので人に相談するとDoxygenを勧められたので使ってみた。これはすごいです。Doxygen用にコメントを書いておくと、それを元に関数やクラスの説明を作ってくれるのはもちろんのこと、クラスの継承関係や関数の呼び出し、インクルードファイルの呼び出しなどをすべて解析してグラフィカルに表わしてくれます。とりあえず今あるコメントをDoxygen用に変更(簡単です。doxygen用コメントの書き方がよくできているので、これを参照。)し、まるごとDoxygenにかけてhtmlを作成して、これ見てねですませてしまっています。本当はhtmlじゃないlatexとかrtfとかもはいてくれますが、latexは文字化けがひどく、rtfはなんかいまいちだったので使えてません。いきなりPDFとかになったりするとうれしいんだけどな。
# by lesailes | 2004-12-09 00:43 | C/C++
さらに補足
補足 (テンプレートを型以外に使う)にクラステンプレートを使う方法を書きましたが、メソッドをstaticにすればインスタンスはつくらずに済むみたいです。

template
class TestClass
{
public:
  static int TestFunc();//staticに変更
};

template
int TestClass::TestFunc()
{
  return mode;
}

int main()
{
  int a= TestClass<0>::TestFunc();
  cout << "a= " << a << endl;
  int b= TestClass<1>::TestFunc();
  cout << "b=" << b << endl;

  return 0;
}
# by lesailes | 2004-12-08 00:12 | C/C++
補足 (テンプレートを型以外に使う)
「テンプレートを型以外に使う」で書いた方法はVC++6.0ではうまく行きませんでした。コンパイルは通るのですが、実行しても思い通りの動作はしません。ちなみにVC++7.1なら問題なく動きます。
VC++6.0で動かすためには、テンプレート関数ではなくテンプレートクラスを使えばできました。

template <int mode>
class TestClass
{
public:
  int TestFunc();
};

template <int mode>
int TestClass<mode>::TestFunc()
{
  return mode;
}

int main()
{
  TestClass<0> c0;
  TestClass<1> c1;

  int a= c0.TestFunc();
  cout << "a= " << a << endl;
  int b= c1.TestFunc();
  cout << "b=" << b << endl;

  return 0;
}

# by lesailes | 2004-11-06 19:22 | C/C++
テンプレートを型以外に使う
処理を場合によって変更したい場合に、if文などを使って場合分けをすると、その部分がループの奥の方だったりすると、余分な処理が発生します。

//例
for ( i= 0; i < n; i++ ){
 for ( j= 0; j < m; j++ ){
  if ( mode == 0 ){
   ...
  }
  else{
   ...
  }
 }
}

例えばこのmodeは定数なんだけど、0のバージョンと1のバージョンを作りたいとします。
そうすると2つ関数を作ってしまえば速度面での問題は解決しますが、ソースの保守という面では、同じようなコードが2倍になってしまって大変です。

そういう場合に、templateを使うことができます。templateは普通は違った型に対して同じ動作をするクラスや関数を1つで実現しますが、templateの引数には型だけでなくintなどの定数もとることができます。そうすると以下のようにすることで一つで2つの関数ができることになります。

//例
//template定義
template <int mode>
int TestFunc()
{
 return mode;
};

//実体
int TestFunc<0>();
int TestFunc<1>();

//メイン関数
int main()
{
 int a= TestFunc<0>();
 cout << "a= " << a << endl;
 int b= TestFunc<1>();
 cout << "b=" << b << endl;
 return 0;
}

//実行結果
a= 0
b= 1

だいたいこんな感じです。
もっといい方法があったら教えてください。
# by lesailes | 2004-11-05 01:32 | C/C++
< 前のページ 次のページ >