如何参数化设计支持多进制输出的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
相关产品推荐
相关产品推荐

