総合掲示板(アップロードファイル合計最大1MB)/添付ファイルはプレビュー時に消えるため、再設定をお願いします。
新規投稿 ┃ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索 ┃設定 ┃過去ログ ┃ホーム
617 / 988     ←次へ | 前へ→

Re:CrystalDiskInfo 8.7.0 のソースコードについて(バグ?)
 G神  - 20/8/16(日) 19:10 -
ところで、C++では、クラスと構造体は、メンバのデフォルトの扱いが違うだけで、実質的には同等ですが、
ATA_SMART_INFO をクラスではなく構造体として宣言されているのはなぜでしょうか?

構造体でもメンバ関数は定義できますので、僭越ながら、else if()内の判定ロジックをメンバ関数化すれば、
同じ処理を一か所のコードで管理できますので、直し間違いや直し漏れも減ると思います。

具体的には、例えば...

BOOL ATA_SMART_INFO::IsDiskCondition(index j) const
{
if((Attribute[j].Id == 0xE8 && (DiskVendorId == SSD_VENDOR_PLEXTOR || DiskVendorId == SSD_VENDOR_SANDISK))
|| (Attribute[j].Id == 0xBB && DiskVendorId == SSD_VENDOR_MTRON)
|| (Attribute[j].Id == 0xB1 && DiskVendorId == SSD_VENDOR_SAMSUNG)
|| (Attribute[j].Id == 0xD1 && DiskVendorId == SSD_VENDOR_INDILINX)
|| (Attribute[j].Id == 0xE7 && DiskVendorId == SSD_VENDOR_SANDFORCE)
|| (Attribute[j].Id == 0xAA && DiskVendorId == SSD_VENDOR_JMICRON && ! IsRawValues8)
|| (Attribute[j].Id == 0xCA && DiskVendorId == SSD_VENDOR_MICRON)
|| (Attribute[j].Id == 0xE9 && (DiskVendorId == SSD_VENDOR_INTEL || DiskVendorId == SSD_VENDOR_OCZ || DiskVendorId == SSD_VENDOR_OCZ_VECTOR))
return TRUE;
else
return FALSE;
}

というメンバ関数を定義すれば、前者は ...

const ATA_SMART_INFO &info=vars[index];

// 中略

else if(info.IsDiskCondition(j))

後者は ...

const ATA_SMART_INFO &info=m_Ata.vars[index];

// 中略

else if(info.IsDiskCondition(j))

となり、将来の対応機種を追加する際には、ATA_SMART_INFO::IsDiskCondition()関数
のみ変更すれば、両者に適用されます。


引用なし

パスワード


・ツリー全体表示

CrystalDiskInfo 8.7.0 のソースコードについて(バグ?) G神 20/8/16(日) 18:39
Re:CrystalDiskInfo 8.7.0 のソースコードについて(... ひよひよ 20/8/16(日) 18:53
Re:CrystalDiskInfo 8.7.0 のソースコードについて(... G神 20/8/16(日) 19:01
Re:CrystalDiskInfo 8.7.0 のソースコードについて(... G神 20/8/16(日) 19:10
Re:CrystalDiskInfo 8.7.0 のソースコードについて(... ひよひよ 20/8/16(日) 21:43

617 / 988     ←次へ | 前へ→
新規投稿 ┃ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃番号順表示 ┃検索 ┃設定 ┃過去ログ ┃ホーム
 93751
ページ:  ┃  記事番号:  

C-BOARD Moyuku v1.03b5