boost::uuids

トップページ > その他 >

abstract

必要なヘッダ
<boost/uuid/uuid.hpp> (UUIDを保持するための型)
<boost/uuid/uuid_generators.hpp> (UUID生成器)
<boost/uuid/uuid_io.hpp> (iostreamによる入出力)
<boost/uuid/uuid_serialize.hpp> (Boost.Serializeによるシリアライズ)
出来ること
128bitのユニークID生成器
リファレンス
en

sample

サンプルの動作確認バージョン [GCC4.4/1.42.0] [VC9/1.42.0]

#include <iostream>
#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/uuid/uuid_generators.hpp>
using namespace boost::uuids;

int main()
{
	// ランダムにユニークIDを生成
	uuid u1 = random_generator()();
	uuid u2 = random_generator()();
	uuid u3 = random_generator()();
	std::cout << u1 << std::endl;
	std::cout << u2 << std::endl;
	std::cout << u3 << std::endl;

	// 16進の文字列表現をuuidオブジェクトに変換
	// (ハイフンの入った文字列表記もサポートされてるはずなのですが
	//   1.42.0 ではバグってて動かない…?)
	uuid base = string_generator()("0123456789abcdef0123456789abcdef");
	std::cout << base << std::endl;

	// 別のuuidをベースに、文字列からUUIDを生成
	name_generator gen(base);
	uuid u4 = gen("www.kmonos.net");
	uuid u5 = gen("boost.org");
	uuid u6 = gen("www.kmonos.net");
	std::cout << u4 << std::endl;
	std::cout << u5 << std::endl;
	std::cout << u6 << std::endl; // 必ずu4と同じになる
}

出力例

6fb60b9b-1c29-4831-9c29-b8311c29b831
8b8365f8-eda4-4683-ada4-8683eda48683
99744049-deb0-4cfa-9eb0-4cfadeb04cfa
01234567-89ab-cdef-0123-456789abcdef
9a5d9d57-47f3-5b00-9a45-26731e323254
9ad8af17-95fd-5050-b9e4-9a1a62ef0035
9a5d9d57-47f3-5b00-9a45-26731e323254

etc

COMや分散オブジェクトやなにかで、世界中で唯一の他とかぶらない識別子、 UUID が必要になることがあります。Boost.Uuid はそういうIDを生成するためのライブラリです。 乱数を使ってランダムに生成することや、 ドメイン名などの識別文字列から生成する (そして同じ文字列からはどの環境で生成しても等しい値になる) ことが可能です。ハードウェアやミドルウェアの提供する機能を使った UUID 生成機能は将来的に実装予定とのこと。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0