首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C++函数-对象模板参数演绎样式

C++函数-对象模板参数演绎样式
EN

Stack Overflow用户
提问于 2014-01-28 03:41:03
回答 1查看 94关注 0票数 1

我试图通过采用一种功能更强的编程风格,将我的临时编程分解为模块化和可重用的组件,但这使我将所有的东西都写了两遍。

例如,我有一个状态stateT state,它由一个可配置的函数对象step更新.

代码语言:javascript
运行
AI代码解释
复制
template<typename sT, typename T1, typename T2>
struct Step {
  T1 func1;
  T2 func2;

  Step(T1 f1, T2 f2) : func1(f1), func2(f2) {}

  sT operator()(sT state) {
    state.A = func1(state.A);
    ... using func2() and internals of state ...
  }
};

这样我就不用打字了

代码语言:javascript
运行
AI代码解释
复制
auto step = Step<stateT,typename_of_func1,typename_of_func2>{func1, func2};

我做了一个make_stepper

代码语言:javascript
运行
AI代码解释
复制
template<typename sT, typename T1, typename T2>
auto make_stepper(sT state, T1 func1, T2 func2) {
  return Step<sT,T1,T2>(func1, func2);
}

现在我可以写了

代码语言:javascript
运行
AI代码解释
复制
stateT state{...constructor arguments...};
auto step = make_stepper(state, func1, func2);
state = state(step);

为了提供一个很好的接口,我最终为每个模板化的函数对象X编写了一个X函数。这是一种很好的风格,还是我在自欺欺人?我能避免编写make_X函数吗?还是我应该改变整个方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-28 03:45:51

这是通常的做法,也在C++标准库中。因此,您在正确的轨道上,没有办法避免编写make_函数,因为无法按照类/结构的要求直接进行扣减。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21404684

复制
相关文章
Three TextureLoader纹理贴图不显示图片(显示黑色)的原因分析
问题在MeshLambertMaterial材质,把它改成MeshBasicMaterial即可显示图片。
Dawnzhang
2022/09/29
3.8K0
Metal Shading Language - 语法小结Metal Shading Language - 语法小结
纹理类型是一个句柄,指向一个一维/二维/三维的纹理数据;相当于OpenGL中的textureBufferID.
用户8893176
2021/08/09
1.1K0
Metal Shading Language - 语法小结Metal Shading Language - 语法小结
OpenGL学习笔记(二)——渲染管线&着色语言
导语 :渲染管线(渲染流水线),一般由显示芯片(GPU)内部处理图形信号的并行处理单元组成。这些并行处理单元两两之间相互独立。不同的型号硬件上独立处理单元的数量有很大差异。 与CPU串行执行不同,渲染
MelonTeam
2018/01/04
2.1K0
OpenGL学习笔记(二)——渲染管线&着色语言
Shader-基础纹理-遮罩纹理
遮罩纹理(mask texture)控制光照的强度,获得更加细腻的效果,通过遮罩纹理控制光照。在制作地形材质的时候混合多张图片,遮罩纹理控制如何混合这些纹理。 通过采样得到的纹素值与某种表面属性相乘,来更加精准的控制模型表面的各种属性。 在代码中添加了BumpMap来进行凹凸纹理效果,通过SpecularMask实现控制高光的光照
祝你万事顺利
2019/05/28
1.2K0
Shader-基础纹理-渐变纹理
一种基于冷暖色调的着色技术,通过渐变纹理控制漫反射光照。核心部分来说用过使用halfLambert构建一个纹理坐标,用这个纹理坐标来对渐变纹理进行采样。
祝你万事顺利
2019/05/28
1.2K0
不联网不插U盘就安全了?黑客能用声波攻击你的硬盘
《不联网不插U盘就安全了?黑客能用声波攻击你的硬盘》文章摘要:研究人员发现了一种利用声波攻击硬盘的方法,可以导致硬盘损坏和数据丢失。攻击者可以利用声波干扰机械硬盘的正常工作模式,使其产生暂时或者永久拒绝服务状态,从而阻止数据被访问。这种攻击方式需要物理接触硬盘,因此可以通过远离硬盘来避免受到攻击。研究人员建议使用加密等方法保护硬盘中的数据。
企鹅号小编
2018/01/04
1.9K0
不联网不插U盘就安全了?黑客能用声波攻击你的硬盘
WebGL2系列之采样器对象
如果我们希望从同一个图片多次读取像素信息,但是每次读取的时候使用的过滤方式不一样, 此时我们需要创建两个不同的纹理对象。
用户3158888
2019/09/09
7600
Direct3D 11 Tutorial 7:Texture Mapping and Constant Buffers_Direct3D 11 教程7:纹理映射和常量缓冲区
在上一个教程中,我们为项目引入了照明。 现在我们将通过向我们的立方体添加纹理来构建它。 此外,我们将介绍常量缓冲区的概念,并解释如何使用缓冲区通过最小化带宽使用来加速处理。
Zoctopus
2018/12/06
6080
纹理压缩
本文介绍了纹理压缩的基本概念、原理、常用压缩方式、压缩工具及相关技术标准,旨在帮助读者了解纹理压缩的基本知识,从而更好地进行纹理压缩相关的实践。
MelonTeam
2018/01/04
1.6K0
纹理压缩
12.QT-通过QOpenGLWidget显示YUV画面,通过QOpenGLTexture纹理渲染YUV
在上章11.QT-ffmpeg+QAudioOutput实现音频播放器,我们学习了如何播放音频,接下来我们便来学习如何通过opengl来显示YUV画面
诺谦
2020/11/04
3.9K0
12.QT-通过QOpenGLWidget显示YUV画面,通过QOpenGLTexture纹理渲染YUV
Pytorch的数据采样器
class torch.utils.data.Sampler(data_source)[source]
狼啸风云
2020/06/10
2K0
文字转语音,1行Python代码搞定,不联网也能用
开源项目:python-office的功能一直在更新中,今天给大家发布一个新功能:文字转语音。
程序员晚枫
2023/09/06
5220
文字转语音,1行Python代码搞定,不联网也能用
CUDA优化的冷知识18| texture和surface
https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html 来阅读原文。
GPUS Lady
2021/02/05
1.2K0
OpenGL ES _ 着色器_纹理图像
玩过游戏的同学们,都知道在游戏人物身上穿的那个叫皮肤,专业点将那个就叫做纹理图像。GLSL 支持在顶点和片段着色器使用纹理图像。
酷走天涯
2018/09/14
1.3K0
Shader-高级纹理-立方体纹理
是环境映射(EnvironmentMapping)一种实现方式。 纹理采样:对立方体采样需要提供一个三维的纹理坐标,这个三维纹理坐标表示了我们在世界空间下的一个3D、方向。
祝你万事顺利
2019/05/29
9010
Qt官方示例-字体采样器
❝预览系列字体的例子。❞   建立字体树显示。 QFontDatabase database; fontTree->setColumnCount(1); fontTree->setHeaderLabels(QStringList() << tr("Font")); foreach (QString family, database.families()) { const QStringList styles = database.styles(family); if (styles.i
Qt君
2023/03/17
4170
Qt官方示例-字体采样器
OpenGL(八)--纹理相关APIOpenGL(八)--纹理相关API
OpenGL(八)--纹理相关API 1. 原始图像数据 //存储图像数据所占内存大小 size = 图像的高度 * 图像的宽度 * 每个像素所占字节数 像素所占字节数:一般为4Byte,包含RGBA四个通道,每个通道为1Byte(8Bit) 2. 认识函数 像素存储方式 //改变像素存储方式 void glPixelStorei(GLenum pname,GLint param); //恢复像素存储方式 void glPixelStoref(GLenum pname,GLint param); /
用户8893176
2021/08/09
1.2K0
OpenGL(八)--纹理相关APIOpenGL(八)--纹理相关API
Metal入门教程总结
本文介绍Metal和Metal Shader Language,以及Metal和OpenGL ES的差异性,也是实现入门教程的心得总结。
落影
2018/08/21
5.1K0
Metal入门教程总结
纹理投影测试
GPU Gems3里有个不规则地形(X,Y,Z三个方向上都有面), 这时就没法简单地用X,Z坐标来计算UV了
逍遥剑客
2019/02/20
6630
点击加载更多

相似问题

采样器不包扎纹理

12

纹理采样器ID不映射到纹理单元

27

绑定OpenGL纹理采样器

10

对纹理采样器纹理单位值的困惑

13

纹理对象和采样器的多重纹理化理论

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档