C++非成员函数
C++ non-member function
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);
打印视频时,它没有显示任何内容。但是,如果我在函数中使用此代码,它确实会打印出一些内容。所以问题是,为什么视频没有存储我附加到它的东西,以及如何修复它?
int main() {
Video< Image<char> > video(5, 5, 1);
video << (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);
}
U 函数不会附加到现有框架,而是创建一个包含附加信息的副本。您的代码不会检索副本,因为这需要实际的赋值
这将有效,但效率非常低:
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);
}
通常,运算符<<(用作流式处理运算符时)定义为:
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;
}
请注意,返回值是对第一个参数的引用,该值由操作修改。 这是允许"菊花链"运算符 <<() 正确执行所必需的。
相关文章:
- 如何使用指针传递给函数的数组中对象的函数成员
- c++构造函数成员初始化:传递参数
- 创建 std::函数,它返回具有函数成员值的变量.分段错误
- 如何在C++通过公共函数访问私有函数成员?
- 解释了构造函数成员初始化列表
- 调用std::函数成员时内存损坏
- 是否可以为模板类的模板函数成员设置别名?
- 捕获 lambda 函数C++成员变量
- 构造函数成员初始值设定项跨成员列出,安全吗?
- 获取与在模板参数中传递的函数成员类型相同的类
- 如何从公共函数成员访问地图私有成员
- C 构造函数成员分配优化
- 使用命名空间进行函数成员定义
- 函数成员作为 CUDA 内核的参数
- 模板基类函数成员的别名
- 函数成员中用于void和继承的enable_if
- 头文件中是否定义了一个很长的Class函数成员
- 类内/构造函数成员初始化
- 使用指向部分专用函数成员的指针自动填充向量
- 指向函数成员的指针