假设我有以下类更改从其他界面收到的数据。
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;
};
所以我用的是整数和浮点数等。我得到一个链表,我操纵它。
但是我想说我希望使用这个类来处理以下类型:
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)
{
}
但它不会编译,抱怨与先前的定义不兼容。
关于如何解决这个问题的任何建议?
答案 0 :(得分:0)
在专门设计类模板上的方法时,必须保持签名相同。
如果您想更改签名,您需要专门化整个班级:
template<>
class Updater<std::pair<std::string, std::shared_ptr<Block>>>
{
...
}