0

假设我有以下类可以更改从其他接口接收到的数据。

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)
{
}

但它不会编译,抱怨与以前的定义不兼容。

关于我如何解决这个问题的任何建议?

4

1 回答 1

0

当只在类模板上专门化一个方法时,您必须保持签名相同。

如果要更改签名,则需要专门化整个班级:

template<>
class Updater<std::pair<std::string, std::shared_ptr<Block>>>
{
   ...
}
于 2012-07-12T14:52:44.067 回答