首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理模版参数不明确的问题?

如何处理模版参数不明确的问题?
EN

Stack Overflow用户
提问于 2019-08-04 08:18:30
回答 1查看 56关注 0票数 1

我想这更多的是一个设计问题。如果这不是在正确的地方,请原谅我。假设我有一个类,它表示系统的总RAM,分为不同的银行:

代码语言:javascript
复制
template <uint16_t bank_sz>
class Ram
{
    constexpr static auto BANK_SIZE = bank_sz;
    using Bank = std::array<uint8_t, BANK_SIZE>;

    public:
    uint8_t read(uint8_t bank, uint16_t adr) const;
    void write(uint8_t b, uint8_t bank, uint16_t adr);
    void dump(std::ostream &os) const;

    private:
    std::vector<Bank> data_ {};
};

模板在那里,因此用户可以指定存储体的大小,因为所讨论的系统可以具有不同大小的RAM存储体。但是,我觉得这可能会让用户感到困惑,并且违反了最小惊讶原则,因为人们期望模板参数指定总RAM的大小,而不是RAM库的大小:

代码语言:javascript
复制
Ram<0x2000> work_ram; // 4 KB total of work RAM? (no, 4 KB per bank)

总RAM在运行之前是未知的,只有存储体的大小是已知的。这个问题的解决方案是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-04 09:06:17

您可以使Bank类型定义成为独立的模板,然后让Ram模板接受Bank作为其模板参数。即:

代码语言:javascript
复制
template <uint16_t SIZE>
using RamBank = std::array<uint8_t, SIZE>;

template <typename Bank>
class Ram
{
public:
    //...

private:
    std::vector<Bank> data_;
};

然后使用它作为

代码语言:javascript
复制
Ram<RamBank<0x2000>> work_ram;

这让我很清楚,work_ram是一个2KB的银行集合。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57342940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档