具有不同签名的功能专业化

时间:2012-07-12 14:44:49

标签: c++

假设我有以下类更改从其他界面收到的数据。

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

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

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

1 个答案:

答案 0 :(得分:0)

在专门设计类模板上的方法时,必须保持签名相同。

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

template<>
class Updater<std::pair<std::string, std::shared_ptr<Block>>>
{
   ...
}