# Boost.Signals FAQ

## Q: シグナルが noncopyable であるということは、シグナルをメンバとして保持するクラスもまた noncopyable であることを意味するのか？

いいえ。 コンパイラは、シグナルをメンバとして持つクラスに対してコピーコンストラクタならびに代入演算子を生成することはできないが、あなたがコピーコンストラクタや代入演算子を書くのは自由だ。 ただしシグナルをコピーしようと試みないように。

## Q: Boost.Signals はスレッドセーフか？

いいえ。 マルチスレッド環境下で Boost.Signals を利用することは大変危険であり、 結果は満足とはほど遠いものとなるだろう。 将来 Boost.Signals はスレッドセーフをサポートするだろう。

## Q: Boost.Signals を Qt と共に使う方法は？

Qt とともに構築する場合、 プロプロセッサマクロを用いて定義されている moc の予約語 `signals` と `slots` が、 Boost.Signals と Qt を共に利用しているプログラムのコンパイルを失敗させる。 これは Qt の問題であり Boost.Signals の問題ではないのだが、 Boost.Signals ライブラリを構築・利用するときに BOOST_SIGNALS_NAMESPACE を他の識別子 (例: signalslib) に定義することで、両方のシステムを共に使うことができる。 このとき Boost.Signals ライブラリの名前空間は `boost::signals` ではなく `boost::BOOST_SIGNALS_NAMESPACE` となる。 Qt と相互作用しない部分で元の名前空間名を保持しておくために、 名前空間のエイリアスを用いることができる:

      namespace boost {
        namespace signals = BOOST_SIGNALS_NAMESPACE;
      }

`BOOST_SIGNALS_NAMESPACE` を再定義すると、 別の `BOOST_SIGNALS_NAMESPACE` 識別子を用いてコンパイルされたモジュールとのリンク互換性を失う。

Last modified: Fri Oct 11 05:41:18 EDT 2002