O.Kですか?その本体の外側にあるクラステンプレートの仮想関数を定義するには?仮想関数をインライン化することはできませんが、コンパイル単位で複数の定義を避けるために、inline
とマークされます(テンプレートヘッダは複数のソースファイルに含まれるものとします)。一方、コンパイラはinline
を無視しても問題ありません。たとえば、以下のコードは正しいですか?クラス定義外のテンプレート定義
template <typename T>
class C
{
public:
virtual void f(T val);
};
template <typename T>
inline
void C<T>::f(T val)
{
//definition
}
?
BTW gcc(3.4.2)は、関数f(T val)
の定義の前にinline
を省略することができますが、通常のクラスの類似機能の前には使用できません。 gccの動作だけですか?
gcc * 3.4.2 *を使用していますか? – jpalecek
@jpalecekこの特定の例では、はいです。 – doc
@doc - 仮想関数*は 'inline'宣言できます(ただし、ここでは必要ありません)。コンパイラは、関数がいつインライン化できるかを正確に把握するのが少し難しくなっています。 –