クラス内クラスにはインテリセンスが働かない?
とまあ、タイトル通りの意味です。
実装部をcppに入れちまう処理としてエンベロープパターンっていうのがあるんですが、次のように書きますよね。
[classA.h] class ClassA { class CImpl; CImpl* m_pImpl; public: void Func1(); // .cppでm_pImpl->Func1()を呼び出す void Func2(); // .cppでm_pImpl->Func2()を呼び出す };
まあやり方は色々あると思いますが、ここでは「C++ Coding Standards」を参考にしました*1。
このとき、.cpp側のコードは下のようになると思うのですが、実装コードを書く場所によって、インテリセンスが効いたり効かなかったりするのです。
[classA.cpp] ClassA::CImpl { public: void Func1() { // Intellisenseがはたらく } void Func2(); }; void ClassA::CImpl::Func2() { // ここではIntellisenseが働かない!! }
というわけなので、インテリセンス使いたさに実装部のコードはFunc1()のようにクラス定義内に直接埋めてます。
なんだか負けた気分です… orz
*1:本当はshared_ptrとかあるんですけど話がややこしいので