具有针对特定数据类型(例如字符串)的多个模板的模板函数?

时间:2018-10-26 01:32:16

标签: c++ function oop templates

template <typename Key, typename E>
class BST : public Dictionary<Key, E>
{
    .....
    E FindHelp(BSTNode<Key, E>*, const Key&) const;
    template <typename Key>
    std::string FindHelp(BSTNode<Key, std::string> *root, const Key &k) const;
    ....
};

template <typename Key>
std::string BST<Key, std::string>::FindHelp(BSTNode<Key, std::string> *root, const Key &k) const
{
    if (root == nullptr) return "Not Found!"; // Empty tree
                                   // If smaller than the root go left sub tree
    if (k < root->key()) return FindHelp(root->Left(), k);
    // If bigger than the root go right tree
    if (k > root->key()) return FindHelp(root->Right(), k);
    // If equal to the root return root value
    else return root->Element();
}

当我这样写我的定义时,我想添加一个处理特定数据类型的函数,例如std :: string

  

错误C2244:“ BST :: FindHelp”:无法匹配   现有声明的函数定义

1 个答案:

答案 0 :(得分:2)

没有局部功能模板的专业化。您只能对类使用部分模板专用化,因此必须首先对BST类进行部分专用化。

template <typename Key, typename E>
class BST : public Dictionary<Key, E>
{
    E FindHelp(BSTNode<Key, E>*, const Key&) const;
};

template<typename Key>
class BST<Key, std::string> : public Dictionary<Key, std::string>
{
    std::string FindHelp(BSTNode<Key, std::string>*, const Key&) const;
};

template <typename Key>
std::string BST<Key, std::string>::FindHelp(BSTNode<Key, std::string> *root, const Key &k) const
{
}