c++ - 如何在模板类中使用模板

标签 c++ templates

<分区>

如果我想让下面的LRU缓存类模板化,我该怎么做呢?我反复收到以下错误:

Template argument for template type parameter must be a type; did you 
forget 'typename'?"

这是我的代码:

class LRU{
    int capacity;
public:
    std::list<std::pair<int, int>> doubly_queue;
    std::unordered_map<int, std::list<std::pair<int, int>>::iterator> elems;
    LRU(int c);
    int get(int key);
    void put(int key, int val);
};

LRU::LRU(int c){
   capacity = c;
}

如何使整个类模板化?

这是模板化后的代码:

template<class T>
class LRU{
    int capacity;
public:
    std::list<std::pair<T, T>> doubly_queue;
    std::unordered_map<T, std::list<std::pair<T, T>>::iterator> elems;
    LRU(T c);
    int get(T key);
    void put(T key, T val);
};

最佳答案

你需要改变这一行:

std::unordered_map<Type, std::list<std::pair<Type, Type>>::iterator> elems;

std::unordered_map<Type, typename std::list<std::pair<Type, Type>>::iterator> elems;

发生这种情况是因为您需要使用 typename

显式消除嵌套类型的成员访问语法歧义

关于c++ - 如何在模板类中使用模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52938794/

相关文章:

c++ - 如何将对象附加到 QList?

c++ - 使用 Boost Asio 接受 IPv6 链接范围地址

c++ - 有什么方法可以更轻松地使用函数指针作为模板参数?

c# - 连接不同的编程语言

c++ - Xcode 不与共享库共享静态变量

ruby-on-rails - 将 Liquid 模板过滤器绑定(bind)到上下文

c++ - 模板参数推导错误

c++ - 定义不区分大小写的映射模板

c++ - 模板类的模板友元函数

c++ - 我如何获得 DirectFB 创建的 X Window 的 ID?