template<class F>
class Backup : public F
{
bool write(void* pData, size_t n)
{
return F().write(pData, n);
}
};
struct LocalFile
{
bool write(pData, n){ return fwrite(pData, 1, n, pFile);
};
struct RemoteFile
{
...
};
使用的時候,可以選擇不同形式的 policy 宣告。
typedef Backup<LocalFile> LocalBackup; LocalBackup backup; backup.write(...);
也可以在 library 外面自訂 policy,產生新的組合:
Backup<SocialNetworkProfile> facebookBackup;
實作的困難點在於分割出要執行的 policy,還有制定 policy 的行為。上面的例子裡,template<class F> class Backup : public F 的繼承關係,可以讓 Backup 繼承 F 提供的功能,增加使用的彈性。
No comments:
Post a Comment