シナリオ: RSS フィードをチェックし、利用可能な新しいバージョンがあるかどうかを調べる単純なアプリケーションがあります。したがって、現在のバージョンが RSS フィードにあるバージョンよりも古いかどうかを確認したいと思います。理想的には次のように単純です。
CURRENTVERSION < updateVersion
問題:バージョニングは major.minor.revision.build で構成されていますが、これを解析してバージョン チェックを実行する方法がわかりません。
比較するパラメータは次のとおりです。
#define CURRENTVERSION = 0,2,5,1
Web からダウンロードしたバージョンは"0.2.6.1"
(文字列として) です。
一方が他方よりも小さいかどうかを確認する最良の方法は何でしょうか?
double に変換してみましたが、値は 0.2 になります (最初の . のみが解析され、残りは無視されます)。
制約: .NET フレームワークが存在しない場合でもアプリケーションが動作する必要があるため、.NET ライブラリを使用したソリューションであってはなりません。
(編集) Karthik Tの回答のおかげで、次の解決策に落ち着きました。
struct Version
{
Version(string versionStr)
{
sscanf(versionStr.c_str(), "%d.%d.%d.%d", &major, &minor, &revision, &build);
}
bool operator<(const Version &otherVersion)
{
if(major < otherVersion.major)
return true;
if(minor < otherVersion.minor)
return true;
if(revision < otherVersion.revision)
return true;
if(build < otherVersion.build)
return true;
return false;
}
int major, minor, revision, build;
};