路傍のプログラマ

只のプログラマが綴る愚痴と備忘録

VC++ 2008 SP1およびg++ 4.2、TR1に向けて

2008-05-15 22:03:52 | プログラミング
VC++ 2008 SP1ではTR1ライブラリが追加されるそうなので、
(GNU g++でも使えるようになっているらしいし)そろそろ準備します。

VC++ 2008 SP1 ベータ1がなぜかインストールに失敗するので、
VC++ 2008英語版 + VC++ 2008 Feature Packを使って実験しました。

unordered_mapを例題に使ってみたのですが、
(いつもながら、g++の方がコンパイラのチェックが細かいというのを除けば)
ヘッダファイルの違いを除いて、VC++でもg++でもunordered_mapを
使えるようです。

いままで、hash_mapがVC++とg++で互換性がなくて敬遠していたので
ちょっとうれしいかも。

以下、両方のコンパイラで通ったソースを記します。

#if defined _MSC_VER
#include <unordered_map>
#elif defined __GNUC__
#include <tr1/unordered_map>
#endif

#include <string>
#include <iostream>

class MyKey {
public:
 std::string value;
 explicit MyKey(const std::string &v) : value(v) { }
 MyKey() { }
 MyKey(const MyKey &right) : value(right.value) { }
};

namespace std {
namespace tr1 {

template<>
struct hash<MyKey> {
 size_t operator()(const MyKey& item) const {
  return item.value.length();
 }
};

}
}

namespace std {

template<>
struct equal_to<MyKey> {
 typedef MyKey first_argument_type;
 typedef MyKey second_argument_type;
 typedef bool result_type;
 bool operator()(const MyKey &left, const MyKey &right) const {
  return left.value == right.value;
 }
};

}

int main(int argc, char *argv[])
{
 std::tr1::unordered_map<std::string, int> someMap;
 someMap["one"] = 1;
 someMap["two"] = 2;

 std::cout << "one -> " << someMap["one"] << std::endl;
 std::cout << "two -> " << someMap["two"] << std::endl;

 std::tr1::unordered_map<MyKey, int> anotherMap;
 anotherMap[MyKey("one")] = 1;
 anotherMap[MyKey("two")] = 2;

 std::cout << "one -> " << anotherMap[MyKey("one")] << std::endl;
 std::cout << "two -> " << anotherMap[MyKey("two")] << std::endl;

 return 0;
}



何気にすごい彼の国のソフトウェア

2008-05-15 16:29:05 | その他
棒記事を読んで、何ヶ月かぶりにOpenOffice 3.0ベータを試してみました。

MS Officeで作った文書をインポートしてみます。

結果、図形の透明色が再現しなくてがっかり。あーやっぱり、そんなもんなのね、という感じ。

(もちろん、OpenOfficeはMS Officeとの互換性だけがウリというわけではなく、
これをもってOpenOfficeの評価とするのはフェアだとは言えません。念のため)

そこで、そーいえば、KingOfficeなるものもあったよなあ、と思い立って試してみました。

結果・・・あまりにも再現性が高くて呆気にとられました。

これだけで判断するのはちょっとアレなのですが、

ひょっとして、彼の国のソフトウェア産業、すごいんじゃないでしょうか。