C++自定义基本类型之间的转换

C++ custom conversion between basic types

本文关键字:之间 转换 类型 自定义 C++      更新时间:2023-10-16

是否可以在C++中提供基本类型之间的自定义隐式转换?

具体来说,我有一个Xerces-c库,它有:

using XMLCh = unsigned short int;

但是,当然没有办法提供一个文本字符串作为unsigned short int。所以我想要一些像:

operator unsigned short int*(char16_t* s) { return reinterpret_cast<unsigned short int*>(s); }
operator char16_t*(unsigned short int* s) { return reinterpret_cast<char16_t*>(s); }

这会让你说:

XMLCh *str = u"Hello, world.";

和:

DOMElement* pEl = ...;
std::u16string str = pEl->getNodeName();

等等。目前,我将不得不将每个Xerces调用封装在一个转换函数中——丑陋!

只能为classes和structs定义自定义转换运算符。不能为内置类型定义它们。

此外,自定义转换运算符不能是非成员函数。这限制了可以在哪里定义它们以及可以为哪些对象类型定义它们。