问题描述
我有一个实现了公共string
转换成员函数的类。与operator<<(iostream &,xxx)
结合使用时,我希望我的类将自动(隐式)转换为string
,因此适合参数类型。
但是,事实并非如此。为什么,我不想编写operation<<
函数。
#include <string>
#include <iostream>
using namespace std;
struct A {
operator string() { return "asd"; }
};
int main() {
cout << A() << endl; // error
cout << string(A()) << endl; // ok
}
解决方法
operator<<
for std::string
是模板,template argument deduction中将不考虑隐式转换,否则将失败。
类型推导不考虑隐式转换(上面列出的类型调整除外):这是overload resolution的工作,以后会发生。
如所示,您可以将A
显式转换为std::string
,或为operator<<
编写A
。