変更してはいけないメソッドがあります。このようなメソッドが変更された場合、コンパイル時エラー(またはコンパイル時間が不可能な場合はランタイム)を作成する方法はありますか?スタティックC++でソースコードが変更されないことをアサートします
このような方法には多くの用途があります(初心者の同僚が変更したくない恐れのあるスレッドやセキュリティの問題を考慮してください)。私の特定のユースケースは、永続データデシリアライザなどの古いメソッドを変更してはならない場合に、下位互換性を維持することです。
私は次のようなものを想像しています:
checksumOfBelowFunction()
はコンパイル時にチェックサムや機能(好ましくはクロスプラットフォーム)の他のいくつかのユニークな表現を計算し、
0x123
は何の既知の基準チェックサムです
static_assert(chechsumOfBelowFunction() != 0x123,
"You changed the method! We can't do this because...")
std::string getRelaseDateForVersion3()
{
// This should never change because "Version 3" was
// only released once!
return "2014-Jan-01";
}
関数はそのままでなければなりません。擬似コードを使ってかなり自由にしたことに注意してください。しかし、私がやろうとしていることを伝えたいと思います。
は、独自のファイルに入れて、それのハッシュを計算し、次にファイルハッシュが期待されているものと一致しないことがあれば構築それぞれでチェック! – NathanOliver
メソッドを変更する/変更しない方法はどのように定義しますか?変更してはいけないソースコードだけか、それとも_behavior_ですか?メソッドが変更された別の関数を呼び出すが、それ以外は変更されていない場合はどうなるだろうか?とにかく、これはC++コンパイラよりビルド/バージョン管理システムの仕事に似ています。 –
@Sergey Klevstov、好ましくは動作であるがソースコードが受け入れられる。 – chessofnerd