createPassword(26)
上面是一个非成员函数的代码,它将向视频追加(向列表中添加内容并且列表是私有的函数),并将其返回给视频。它是运算符template <typename Frame>
Video<Frame> operator<<(const Video<Frame>& video,const Frame& newFrame){
Video<Frame> v1(video);
v1.append(newFrame);
return v1;
}
的非成员函数。
下面是<<
。我不知道为什么当我返回并使用main.cpp
打印视频时,它并没有显示任何内容。但是,如果我在函数中使用此代码,它会打印出一些内容。所以问题是,为什么视频没有存储我附加的东西,以及如何修复它?
Utilities::printCharVideo(video);
答案 0 :(得分:0)
您的功能不会附加到现有框架,而是创建一个附加信息的副本。您的代码不会检索副本,因为这需要实际的分配
这样可行,但效率很低:
int main() {
// note how your operator<< accepts a temporary rvalue as its first
// argument... This points to something not being right.
Video<Image<char>> video = Video<Image<char>>(5, 5, 1)
<< (Image<char>(5, 5, Utilities::PIXELS_2))
<< (Image<char>(5, 5, Utilities::PIXELS_0))
<< (Image<char>(5, 5, Utilities::PIXELS_1))
<< (Image<char>(5, 5, Utilities::PIXELS_2));
Utilities::printCharVideo(video);
}
通常,运营商&lt;&lt; (当用作流媒体运营商时)定义为:
template <typename T, typename U>
T& operator << (T& t, const U& u)
{
//... some code that append u to t,
// like t += u, or similar operation
// that actually augments t.
return t;
}
请注意,返回值是对第一个参数的引用,该值由操作修改。这是必需,以便正确地允许'daisy-chaining'运算符&lt;&lt;()。