私は、C++11 には十分な静的チェック (コンパイル時間) があり、C++11 の概念チェック (削除) であるべきだった部分の大部分を実装できることを読みました。(削除された概念に関する最近の質問のコメントでこれを読みました... - その質問は建設的ではないためすぐに閉じられました)。
以下の C++03 コードは、クラス内のメンバー関数の存在のみをチェックします (テンプレート クラスが動作するクラス)。検索される 4 つのメンバー関数を次に示します。私は常に同じパターンを使用します。
- 関数のプロトタイプの typedef を定義するための typedef
- 型名 TExtension がそのようなメンバー関数を定義していない場合、または別のプロトタイプを持っている場合にコンパイルを中断する static_cast の呼び出し
コードは次のとおりです。
template <typename TExtension>
class
{
...
void checkTemplateConcept()
{
typedef unsigned long (TExtension::*memberfunctionRequestedId)();
static_cast<memberfunctionRequestedId>(&TExtension::getRequestId);
typedef eDirection (TExtension::*memberfunctionDirection)();
static_cast<memberfunctionDirection>(&TExtension::getDirection);
typedef eDriveWay (TExtension::*memberfunctionDriveWay)();
static_cast<memberfunctionDriveWay>(&TExtension::getDriveWay);
typedef unsigned long (TExtension::*memberfunctionCycleId)();
static_cast<memberfunctionCycleId>(&TExtension::getCycleId);
}
}
これは私のコードの一部でしたが、完全にC++03に基づいていました。これらの新しいC++ 11機能を使用して、喜んで書き直します...代わりにここで何を使用する必要がありますか?