为了测试和显示我的库的一些功能的结果,我正在创建一组方便的功能.
我有一个执行功能,看起来像:
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,但这也不是最干净的解决方案. 我想知道全局转换运算符是否真的不能重载,如果是这样,为什么.