有一个模板类,如下所示
template<typename K, typename V>
class Db {
public:
Db(const string& dbname, int flags = O_RDWR|O_CREAT);
~Db();
// return true on success, false on failure
bool SimpleRetrieve(const K&, V&) const;
bool Retrieve(const K&, V&) const;
};
同时,想对 SimpleRetrieve(const K&, string &) const;
有一个不同的实现,我该如何声明这样一个模板类?
尝试了类似下面的东西,努力编译...
template<typename K, typename V>
class Db {
public:
Db(const string& dbname, int flags = O_RDWR|O_CREAT);
~Db();
// return true on success, false on failure
bool SimpleRetrieve(const K&, V&) const;
template<>
bool SimpleRetrieve(const K&, string&) const;
bool Retrieve(const K&, V&) const;
};
最佳答案
你不需要 template<>
在这种情况下有 2 个重载。
但是如果你想要模板化的类方法,afaik,你不能这样做,因为在非命名空间范围内不允许特化。
所以,这应该可以正常工作:
template<typename K, typename V>
class Db {
public:
Db(const string& dbname, int flags = O_RDWR|O_CREAT);
~Db();
// return true on success, false on failure
bool SimpleRetrieve(const K&, V&) const;
bool SimpleRetrieve(const K&, string&) const;
bool Retrieve(const K&, V&) const;
};
但我不确定你的编译器将如何使用这种重载,你可能应该看看 std::enable_if .
关于c++ - 有选择地覆盖模板类的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20697941/