Kikuchy's Second Memory

技術のこととか、技術以外のこととか、思ったことを書き留めています。

inlineなインスタンスメソッド

最近書いていませんですみません。やっと研究室の方がひと段落したので。


さて、C++を書いていて処理速度が気になる処理があったので、インスタンスメソッド(メンバ関数)をインライン化してしまおうと考えました。
そこでこうしたところコンパイルエラーが。シンボルが見つからないそうです。

// これは動かない例。宣言と実装のファイルは分けてある。


// SomeClass.h
class SomeClass {
    public:
        void hogeInlineMethod();
};


// SomeClass.cpp
inline void SomeClass::hogeInlineMethod(){
    ......
}

調べてみたところ、inlineにするメソッドはヘッダファイルに記述されていないといけないそうです。知らなかったよ!
理由は「inline展開されるメソッドがどんなメソッドなのか、ヘッダファイルに書かれていないとわからないから」だろうです。なるほど納得。

というわけで、以下のようにしたら動きましたし、処理も早くなりました。よかった。

// SomeClass.h
class SomeClass {
    public:
        void hogeInlineMethod();
};

inline void SomeClass::hogeInlineMethod(){
    ......
}

// SomeClass.cpp にはメソッドの実装を書かない



ちなみに、

// SomeClass.h
class SomeClass {
    public:
        void hogeInlineMethod(){
            ......
        }
};

// SomeClass.cpp にはメソッドの実装を書かない

とすれば自動的にhogeinlineMethod()はinlineなメソッドになるそうです。でもこれじゃ読みづらいし、元のままでいいや。


参考
http://d.hatena.ne.jp/white_wheels/20100318/p1