C++中如何让类默认自动转换为指定类型?
C++20中实现类隐式自动转换以直接访问目标类型成员的可行性
我不确定C++里能不能实现这样的功能:让一个类默认始终自动转换为另一种指定类型,从而直接调用目标类型的成员函数。我设想的实现代码如下:
class A : public always_cast<std::string> { private: std::string *actualData = new std::string("foo"); public: operator std::string &(){ return *this->actualData; } }; void main(){ A value; std::cout << value.append(" bar") << std::endl; // 期望输出 "foo bar" }
目前我能实现的最接近效果是重载类型转换运算符,但必须显式转换才能访问std::string的成员函数:
class A { private: std::string *actualData = new std::string("foo"); public: operator std::string &(){ return *this->actualData; } }; void main(){ A value; std::cout << ((std::string) value).append(" bar") << std::endl; // 成功输出 "foo bar" }
这是简化后的示例,我正在开发一个基于C++20标准、包含大量模板的纯头文件库,待转换的目标类型可以是任意类类型。手动转换虽然可行,但我希望能让库的使用者省去这一步,提升代码的便利性与可读性。请问有没有我没考虑到的可行方案?还是说这个需求根本无法实现,只能接受这种稍显不便的使用方式?
编辑:根据反馈,这个需求基本无法实现,而且就算能实现也不是好的设计选择。我认为最适合我场景的解决方案是重载->运算符,通过它来访问目标类型的成员。
内容的提问来源于stack exchange,提问作者Chris Ca
相关产品推荐
相关产品推荐

