C++ 03缺乏一些东西我喜欢使用方法:std::shared_ptr
,std::function
和std::bind
.
我们无法完全切换到C++ 11,因为该项目需要使用较旧的libstdc ++版本.我知道这些东西也在Boost中,但我们不能将其用于其他原因.
因此我们开始使用C++ 0x/TR1,我们目前使用的所有编译器版本都支持它.但是我们遇到了一些麻烦:
-std=c++0x
开关在Clang中做了什么,没有它就可以编译好std::tr1::shared_ptr
vsstd::shared_ptr
所以,问题是:当可移植性很重要时,C++ 0x/TR1是否可以安全使用?它是否在所有主要编译器中实现?我应该担心专有工具链等吗?我们最好坚持使用C++ 03吗?
这有什么区别:
struct something s = {};
Run Code Online (Sandbox Code Playgroud)
还有这个?
struct something s = {0};
Run Code Online (Sandbox Code Playgroud)
据我所知,两者都将每个成员初始化为零.
我正在使用 HTML5 的 Canvas 元素做一些工作,我想知道如何以功能方式最好地实现我自己的自定义绘图功能。这些中的每一个都需要上下文,但我可以想到多种方法来为它们提供上下文:
如果可以避免的话,我不喜欢使用全局变量,所以我正在逐步淘汰选项 2。选项 3 需要太多的代码重复,所以我也忽略了这一点。
这给我留下了选择 1,这是我将如何用非函数式语言来做,而 4 在我看来是最干净的方法,但我不完全确定它不会导致问题。你怎么做呢?有什么我不应该选择选项 4 的原因吗?
为了说明这一点,我将为剩余的每个选项添加一个代码示例。这是选项1:
function drawPerson(context, ...) {
context.fillRect(...);
...
}
$(function() {
var context = $("#canvas")[0].getContext("2d");
drawPerson(context, ...);
});
Run Code Online (Sandbox Code Playgroud)
这里是选项 4:
CanvasRenderingContext2D.prototype.drawPerson = function(...) {
this.fillRect(...);
...
}
$(function() {
var context = $("#canvas")[0].getContext("2d");
context.drawPerson(...);
});
Run Code Online (Sandbox Code Playgroud) 我正在研究一款使用SDL的2D游戏.由于某些系统具有较弱的CPU和强大的GPU,因此除了普通的SDL /软件之外,我还有一个使用OpenGL的渲染器后端.
渲染器界面的简化版本如下所示:
class Renderer {
public:
virtual void render_surface(SDL_Surface* surface) = 0;
virtual void render_text(const std::string& text, const Font& font) = 0;
};
Run Code Online (Sandbox Code Playgroud)
但是这有一个问题:glBindTexture
每当我使用OpenGL绘制表面时,我都会失去很多时间来重复调用.现在,我有一个基于表面内存地址的傻瓜缓存,但它显然不适用于动态生成的表面,例如内部render_text
.
我能想到的唯一合适的解决方案是彻底改变界面并明智地调用缓冲区纹理:
class Renderer {
public:
virtual Texture load_surface(SDL_Surface* surface) = 0;
virtual Texture load_text(const std::string& text, const Font& font) = 0;
virtual void render_texture(const Texture& texture) = 0;
};
Run Code Online (Sandbox Code Playgroud)
但这是IMO使用起来有点难看,并且必须为软件渲染器伪造.
还有什么我可以做的吗?
我正在研究一小部分C/C++源代码.程序从stdin读取输入值,使用算法处理它们并将结果写入stdout.
我只是在一个文件中实现所有这些,但我也想要算法的测试用例(而不是输入/输出读取),所以我的项目中有以下文件:
我马上在sort.hpp中实现了算法,没有sort.cpp.它相当短,没有任何依赖.
你是否会说,在某些情况下,标题中定义的函数是可以的,即使它们是复杂的算法而不仅仅是简单的访问器/变换器?或者我有理由避免这种情况吗?我应该何时将代码从头文件移动到源文件?
c++ ×3
c ×1
c++11 ×1
caching ×1
canvas ×1
coding-style ×1
header ×1
html ×1
javascript ×1
opengl ×1
optimization ×1
portability ×1
struct ×1