Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;创建模板T对象的副本_C++_Templates_Operator Overloading - Fatal编程技术网

C++ C++;创建模板T对象的副本

C++ C++;创建模板T对象的副本,c++,templates,operator-overloading,C++,Templates,Operator Overloading,嘿,伙计们,有人能帮我吗 我的问题是,我不知道如何正确使用带有运算符的模板 这是我的班级: template <typename T> class myClass { public: myClass() {} }; template <typename T> //create copy of object T in myClass myClass& operator<<(const T&) { //how should

嘿,伙计们,有人能帮我吗

我的问题是,我不知道如何正确使用带有运算符的模板

这是我的班级:

template <typename T>
class myClass {

public:
    myClass() {}
};

template <typename T>

//create copy of object T in myClass
myClass& operator<<(const T&) {

    //how should my code look right here?

}

myClass& operator>>(T&){
     //and here ??
}
模板
类myClass{
公众:
myClass(){}
};
模板
//在myClass中创建对象T的副本
myClass和运算符(T&){
//这里呢??
}
这是我的主要观点:

#include <iostream>
#include <string>
#include <fstream>

int main(){

myClass<string> e; // create empty myClass
string someText = "testing this text blabla";
e << someText;  //input of someText in e

//test if input works correctly
string test;
e >> test; //put value of e in string test
cout << test << endl; //output test

return 0;
}
#包括
#包括
#包括
int main(){
myClass e;//创建空的myClass
string someText=“测试此文本blabla”;
e>test;//将e的值放入字符串测试中

只需按
main
函数中的代码执行即可:

e << someText;  //input of someText in e
也许你可以做一些类似的事情

template<typename T>
class myClass
{
public:
    myClass() = default;  // Defaulted default constructor

    myClass& operator<<(T const& val)
    {
        value_ = val;
        return *this;
    }

    myClass& operator>>(T& val)
    {
        val = value_;
        return *this;
    }

private:
    T value_;
};
实际上翻译为

operator>>(e, test);

不完全清楚您试图尝试的是什么。您的
myClass
应该像对象的容器一样运行
T
?非成员运算符重载需要两个参数:要使用的对象,以及要使用的另一个对象或值。有关详细信息,请参阅。当然,也应该阅读解释清楚。如果它是一个
字符串
你将如何复制它?这样做,但是写
T
而不是
字符串
。可以使
操作符>
成为
常量
成员函数。@Mansoor不能这样做,因为它返回了对非常量自身的引用。
e >> test;
operator>>(e, test);