Intel Threading Building Block2008/12/29 16:10

年末で、やっと、落ち着いて調べ物ができるようになったのに、ついつい、怠けてしまう雲は、気合いを入れるために?、ずっ~と宿題だと思っていた、Intel のスレッドライブラリを使ってみました。

単純な、素数を求めるエラネストラ?の篩いを走らせてみたところ、CPUのコアの数だけ素直にパフォーマンスが上がったのには、本当にびっくりしました。

これなら、行列の積のような内積の計算には簡単に応用できるのではないかと?とても良い気分になっている雲です。

まぁ、実際には、いろいろと、工夫する必要があるとは思うのだけれど、世の中は、雲の知らないところで進んでますね(←当たり前)。

と、2008年の終わりにしみじみ思う雲でした。

operator について2008/11/26 06:21

雲は、C++ が大好きな割に、C++ の operator にはあまりなじみが無く、これまで、見ないふりをして過ごしてきました。ただ、それも、どうなのか?と思うようになり、いろいろと調べてはいたのですが、なかなか、理解が進まずに困っていました。

ただ、そのへなちょこな雲にも救世主が。。。

http://homepage2.nifty.com/well/Operator.html

ここのページは、operator に関してはとても参考になる記述が目白押しです。興味のある方は、是非、一読下さいませ。

Sealed指定2008/10/27 06:28

C++/CLI には、Sealed 属性があります。 どういうものかと言えば、単に、継承を抑制する機能です。

たとえば、

public ref class Base sealed{

};

としておくと、

public ref class Derived : Base{

};

は、ダメと言われます。

面白いのは、sealed 属性を関数にもつけることが出来ます。

public ref class Base{ public:

   virtual void func() sealed{ cout << "GOOD"; << endl; } 

};

と書いておくと、

public ref class Derived : Base{ public:

  virtual void func(){ cout << "Derived" << endl; }

};

は当然 NG となります。

使い方はわかったけど、どこで使えば良いのか?はわかりません。。。

};

抽象クラス2008/10/26 08:04

C++, C++/CLI では、純粋仮想関数を含んだクラスを、抽象クラス と呼びますが、C++/CLI ではクラスの宣言時に抽象クラスの場合は、 abstruct をつける必要があります。

つまり、

public ref class Base abstruct{ public:

  virtual func() = 0;
  virtual func2(){ }

};

と言った感じです。

ちなみに、派生クラスでは、

public ref class Derived : Base{ public:

  virtual func() override {}
  virtual func2() new{ } 

};

のように、virtual と override を書きます。面倒な。。。

しかも、override の代わりに new を指定すると、動作が変わります。

Base b = new Derived();

b.func2() とした場合に、なんと、new を指定していると、Base の func2 関数が呼ばれます。

これ、使い道、あるのでしょうか?

(※) この new の使い方はよくわかりませんが、virtual を使わない場合を 考えると、これは、わかります。

class Base{ public:

 void func(){ cout << "Base" << endl; }

};

とした場合、

class Derived : public Base{ public:

  void func(){ cout << "Derived" << endl; }

};

とするのは、C++ では合法です。ただ、こうすると、Base の func 関数が 上書きされて消えてしまうので、C++/CLI では、関数定義の後ろに、 new というキーワードを書くようにしていると思います。

ただ、virtual に new を書く理由はさっぱりわかりかねます。。。

ここを参考にしました。 http://ufcpp.jp/study/csharp/oo_inherit.html

キャストについて2008/10/25 19:43

C++ と C++/CLI のキャストについて。

C++ のキャストは、

static_cast, dynamic_cast, reinterpret_cast, const_cast

があります。

C++/CLI では、上記に加えて、

safe_cast

が追加されています。

safe_cast は、dynamic_cast とは異なり、キャストが出来なかった 時に、例外を発生させます。 (dynamic_cast は、単純に、0(nullptr) を戻すだけです)

その他のキャストは、特に、C++ と C++/CLI で違いはありません。