c++ - 有选择地覆盖模板类的功能

标签 c++ templates template-specialization

有一个模板类,如下所示

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/

相关文章:

c++ - 如何专门化具有指向成员参数的指针的模板类?

c++ - 内联函数返回不正确的结果

c++ - 繁忙循环与 sleep (0)和暂停指令有什么不同?

c++ - 是否可以用 C++ 编写应用程序的核心,然后将 Obj-C 和 Cocoa 用于 UI?

c++ - 多包参数包匹配规则

c# - 两种可能的编程模式,哪一种更合适?

c++ - 字符可打印程序

c++ - 模板循环依赖 - 不同文件中的单独类

c++ - 模板实现错误(嵌套类)

c++ - 访问成员模板的模板参数