次のパターンを持つかなりの数の関数があるシナリオがあります
RETURN_TYPE FOO(
TYPE PARM1,
TYPE PARM2)
{
PROLOG(PARM1, PARM2);
//FOO_BODY
EPILOG(PARM1, PARM2);
}
上記のパターンに従う関数の例を考えてみましょう
SQLRETURN SQLGetInfo(
SQLHDBC ConnectionHandle,
SQLUSMALLINT InfoType,
SQLPOINTER InfoValuePtr,
SQLSMALLINT BufferLength,
SQLSMALLINT * StringLengthPtr)
{
// ******** Prolog(InfoValuePtr, BufferLength) *************
CComSafeArray<BYTE> _InfoValuePtr(BufferLength);
LPBYTE pData;
// **********************************************************
SQLRETURN rc = p->SQLGetInfo(
reinterpret_cast<PSSQLHSTMT>(ConnectionHandle),
InfoType,
_InfoValuePtr,
BufferLength,
StringLengthPtr);
// ******** Epilog(InfoValuePtr) ******************************
::SafeArrayAccessData(_InfoValuePtr, reinterpret_cast<void **>(&pData));
memcpy_s(InfoValuePtr, BufferLength, pData, _InfoValuePtr.GetCount());
::SafeArrayUnaccessData(_InfoValuePtr);
return rc;
// *************************************************************
}
私のジレンマは、開発中にエラーが発生しやすく、コードがかなり肥大化するという同じコードパターンを何度も繰り返すのが少し不快だということです。明日になっても、何かを変えるということは文字通り、その変化に一貫性を持たせるために、すべての出来事を細心の注意を払って変えることを意味します。
パターンを処理するための推奨される方法/ベストプラクティスは何ですか? Macros
、Templates
注:まだブーストを使用しておらず、この問題を解決するためだけにブーストを追加することは、ここでは選択肢にならない可能性があります