c – 重载全局类型转换运算符

c – 重载全局类型转换运算符,第1张

概述为了测试和显示我的库的一些功能的结果,我正在创建一组方便的功能. 我有一个执行功能,看起来像: template <typename R, typename I>std::string execute( const std::string& func_name, R(*func_ptr)( const I& ), const I& func_input ); 它调用该函数,并将结果和参数以格式化 为了测试和显示我的库的一些功能的结果,我正在创建一组方便的功能.

我有一个执行功能,看起来像:

template <typename R,typename I>std::string execute( const std::string& func_name,R(*func_ptr)( const I& ),const I& func_input );

它调用该函数,并将结果和参数以格式化的字符串显示,可以发送到std :: cout.

问题是我的一些功能不返回可转换到字符串的结果.我以为我可以简单地重载global :: operator std :: string这样的东西:

template <typename T>operator std::string( const std::vector<T>& v );

但海合会抱怨说:

error: 'operator std::string(const std::vector<T,std::allocator<_CharT> >&)' must be a nonstatic member function

那么问题当然是我不能添加成员 *** 作符到std :: vector,甚至对于我的类,我不想用“for testing”转换 *** 作符来污染它们.

我想我可以添加一层间接和使用一个函数而不是一个转换 *** 作符,但这不会是更美观的解决方案.我也可以重载:: operator<<对于std :: ostream并使用std :: ostringstream,但这也不是最干净的解决方案. 我想知道全局转换运算符是否真的不能重载,如果是这样,为什么.

解决方法 转换运算符(转换运算符)必须是生成转换类型的可转换类的成员.作为赋值运算符,它们必须是成员函数,正如您的编译器告诉您的.

根据您想要调试的部分,您可以尝试使用元编程将执行方法转发到不同的实际实现,为打印内容的容器提供特定的实现.

为什么你不想要提供运算符<为您的类型?我认为这是惯用的解决方案.与其他语言不同,您使用转换为字符串以产生可打印结果的方法,在C中,惯用方式是提供 *** 作符<然后使用stringstream(或boost :: lexical_cast或一些类似的解决方案)转换为基于运算符<<实现.有一个简单的实用程序类here,用于从覆盖运算符<<<如果要使用它作为起点.

总结

以上是内存溢出为你收集整理的c – 重载全局类型转换运算符全部内容,希望文章能够帮你解决c – 重载全局类型转换运算符所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1252091.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存