gpt4 book ai didi

c++ - 我的模板类方法返回错误类型?

转载 作者:行者123 更新时间:2023-12-02 09:48:33 52 4
gpt4 key购买 nike

模板类方法 return_self 必须返回 Class<string> 类型的对象
.但是,它返回 Class<basic_string<char>>为什么,请查看我的代码

using namespace std;

template <typename Type>
struct Class;

template <typename Type>
ostream& operator<<(ostream& os, Class<Type>& ref){
os << ref.value;
return os;
}

template <typename Type>
struct Class{
Type value;

Class(Type val): value{val}{}

// Returns bad Type
Class<Type> return_self(){
return *this;
}

friend ostream& operator<<<Type>(ostream&, Class<Type>&);
};

int main(){
Class<string> obj{"How are you"};

cout << obj << endl; // This one works fine

cout << obj.return_self() << endl; // Error occurs here
}


最佳答案

std::string被定义为 std::basic_string<char> 的别名所以它们实际上是同一类型。这不是您的程序无法编译的原因。
问题是 obj.return_self()表示临时的,temporaries cannot bind to non-const references ,例如 ref您的 operator<< 中的论点功能。
您将观察到与此代码完全相同的错误,它具有相同的问题(尝试将临时绑定(bind)到非常量引用):

cout << Class<string>{"How are you"} << endl;
解决方案是制作 ref一个常量引用:
template <typename Type>
ostream& operator<<(ostream& os, Class<Type> const & ref){
os << ref.value;
return os;
}
(也不要忘记修复 friend 声明。)

关于c++ - 我的模板类方法返回错误类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62650500/

52 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com