AUTOSAR C++14 Rule A14-5-2
Class members that are not dependent on template class parameters should be defined in a separate base class
説明
ルール定義
Class members that are not dependent on template class parameters should be defined in a separate base class.
根拠
テンプレート クラスのメンバーにアクセスするには、テンプレートをインスタンス化する必要があります。メンバーがテンプレート パラメーターに依存しない場合は、このインスタンス化ステップは不要です。たとえば、このテンプレート クラス aClass のメンバーの anotherMember と someotherMember は、パラメーター T に依存しません。
template <typename T>
class aClass {
T aMember
int anotherMember;
int someotherMember
}aClass をインスタンス化する必要があります。不必要なテンプレート インスタンス化を避けるために、テンプレート宣言にこれらのメンバーを含めないでください。テンプレート宣言にこのメンバーを含めると、不必要にコードが増大する可能性もあります。コンパイラは、テンプレートのインスタンス化ごとに、別々のテンプレート クラスのコピーを生成します。クラス メンバーがテンプレート パラメーターに依存しない場合は、テンプレート インスタンス化ごとに、このメンバーの同じコピーが作成されます。
Polyspace 実装
チェッカーは、テンプレート パラメーターに依存しないテンプレート クラスのデータ メンバーにフラグを設定します。また、チェッカーはメンバー関数にはフラグを設定しません。
このチェッカーによってテンプレートの複数のデータ メンバーにフラグが設定された場合は、これらのデータ メンバーを集約するテンプレートの基底クラスを作成します。
場合によっては、このルールに厳密に準拠しないという選択もあり得ます。たとえば、テンプレート パラメーターに依存しないテンプレート クラスのメンバーだけが 1 つだけの場合は、そのメンバー用に別の基底クラスを作成することはしないという選択もあり得ます。問題を修正しない場合は、改めてレビューされないように結果またはコードにコメントを追加します。詳細は、以下を参照してください。
Polyspace ユーザー インターフェイスでのバグ修正または正当化による結果への対処 (Polyspace ユーザー インターフェイスで結果をレビューする場合)。
Polyspace Access でのバグ修正または正当化による結果への対処 (Polyspace Access) (Web ブラウザーで結果をレビューする場合)。
コードへの注釈付けと既知の結果または許容可能な結果の非表示 (IDE で結果をレビューする場合)
トラブルシューティング
ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: テンプレート |
| カテゴリ: Advisory、Partially automated |