重载类型转换操作符、赋值操作符时,如何让衍生的类型也支持转换和赋值

srhouyu 2017-09-08 11:09:55
一个utf8char类,写了到char的类型转换、用char构造、从char赋值的方法


struct utf8char {
char c; // 成员
utf8char(char value) : c(value) {} // 用char构造
utf8char operator=(const char target) { return utf8char(target); } // 从char赋值
operator char() { return c; } // 到char的类型转换
};


直接用值进行测试是可以的。

// 可以编译
utf8char u1 = 'y';
char c1 = u1;


但是带const的不行。

const utf8char u2 = 'y';
const char c2 = u2; // 不存在从const utf8char到const char的适当转换函数


单级指针也不行。

char c3 = 'y';
utf8char* u3 = &c3; // char*不能用于初始化utf8char*的实体
char * cc3 = u3; // utf8char*不能用于初始化char*的实体


怎么才能让utf8char衍生的各种类型能够全部起效呢?
...全文
195 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2017-09-09
  • 打赏
  • 举报
回复
不加const不行是因为常量对象只能调用常量成员函数
paschen 版主 2017-09-09
  • 打赏
  • 举报
回复
改成:operator char() const { return c; }
呔妖怪来嘛 2017-09-08
  • 打赏
  • 举报
回复
使用模板呀~
赵4老师 2017-09-08
  • 打赏
  • 举报
回复
《C++编程思想》
xskxzr 2017-09-08
  • 打赏
  • 举报
回复
operator char() const; 指针不能转是正常的。int* 和 long* 之间也不能这样转。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧