You need to enable JavaScript to run this app. 如何参数化设计支持多进制输出的C++模板输出运算符?
优惠活动
大模型
产品
解决方案
定价
更多

如何参数化设计支持多进制输出的C++模板输出运算符?

数制格式化模板类开发问题

出于练习目的,用户希望编写一个模板类,用于将十进制数打印为各类其他数制(如十六进制、八进制)的格式。

预期使用效果

理想的使用代码如下:

int main() {
    Num<hex> k_hex = 20;
    Num<Oct> k_oct = 20;
    std::cout << k_hex << std::endl;  // 输出 "0x14"
    std::cout << k_oct << std::endl;  // 输出 "0o24"
}

初步实现尝试

用户计划为Num类编写模板,将对应数制的类型作为模板参数传入,写出的初版代码如下:

template<typename B>
struct Num {
    int i;
    friend std::ostream& operator<<(std::ostream& os, const int& i) {
        return os << std::template B << i;
    }
};

核心疑问

用户目前需要解决的问题是:如何设计各类数制对应的类型类?

  • 初步猜测这类数制类型需要封装流操纵符能力,支撑实现os << std::template B << i的输出逻辑
  • 初步尝试编写的hex结构存在设计不明确的问题,不确定成员应当返回什么内容,写出的试验代码如下:
struct hex {
    using returnType = typename std::function<std::ostream& (std::ostream& os, int i)>;

    template<typename base>
    static returnType base = [](std::ostream& os, int i) {
        return os << std::ios::base << i;
    }
};

内容的提问来源于stack exchange,提问作者TMOTTM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.10 04:54:03