他のインターフェイスから受信したデータを変更する次のクラスがあるとします。
template <class T>
class Updater
{
public:
Updater():
_db(Database<T>())
{
}
void append(T value)
{
std::list<T> l = _db.get();
l.push_back(value);
_db.set(l);
}
void remove(T value)
{
std::list<T> l = _db.get();
l.remove(value);
_db.set(l);
}
private:
Database<T> _db;
};
だから私はintやfloatなどでこれを使っています。リンクされたリストを取得し、それを操作します。
しかし、このクラスを使用して次のタイプで作業したいとしましょう。
std::pair<std::string, std::shared_ptr<void>>
つまり、名前に関連付けられたメモリのブロックです。
上記の append 関数をそのまま使用して、連結リストにさらにメモリを追加してから、db に戻すことができます。ただし、名前 (ペアの文字列部分) に基づいてブロックを削除したい場合は、次のように特化してこれを解決できると考えました。
template <>
void MultiValue<std::pair<std::string, std::shared_ptr<Block>>>::remove(std::string value)
{
}
しかし、以前の定義と互換性がないことを訴えて、コンパイルしません。
これを解決する方法について何か提案はありますか?