我有一些正在使用boost库的中型项目,因此在调试应用程序性能方面受到了影响(Visual Studio 2008).
我现在使用的解决方案意味着即使在调试模式下打开函数内联,这也带来了足够的性能,但肯定会有一些缺点.
如果我强制使用函数inlining(/Ob2)开关,有谁知道在调试功能方面我会失去什么?
也许有人对加速boost /其他模板库的调试性能有任何其他想法?
有人对如何boost::shared_ptr通过价值或参考传递任何理想.
在我的平台(32位)sizeof(shared_ptr)等于8个字节,看起来我应该通过引用传递它们,但也许有人有另一个意见/做了一个配置文件/类似的东西?
我目前正在开发自己的3D引擎,它在几何渲染方面的能力非常有限,我想扩展它.我感兴趣的是如何在存储几何对象和绘制它们方面做到这一点.
目前,我的抽象仅支持将几何体渲染为三角形的通用列表(D3DPT_TRIANGLELIST在Direct3D术语中).还有其他几种表示对象的方法 - 例如三角形条带(D3DPT_TRIANGLESTRIP)或三角形扇形(D3DPT_TRIANGLEFAN).
我的问题是 - 它们是否在现代3D引擎中绘制几何图形时实际使用?
他们的使用如何受益并且他们以某种方式适合游戏创建管道?
(我的意思是,艺术家可以开发他们的模型,以便他们利用这些strips/ fans技术吗?)
假设我有任意模板方法,它可以通过值和const引用 接收参数(显然,对于普通类型和相应的对象).
在编写模板函数原型时如何处理这种情况?
我可以做类似的事情:
template <typename T> void Foo(T value) {
// Do something.
}
template <typename T> void Foo(const T& value) {
// Do something, yeah.
}
// Specialization for first prototype.
template <> void Foo<int>(int value) { }
// Specialization for second prototype.
template <> void Foo<Object>(const Object& value) { }
Run Code Online (Sandbox Code Playgroud)
但是这种方法对于简单的函数来说是可以接受的,这些函数纯粹作为其他一些调用的包装器.
如果函数(非模板化版本)里面有很多代码,这意味着我必须复制代码两次.
我可以在这里做些更聪明的东西吗?
你好!有人知道实现或模仿以下行为的方法吗? (此代码导致编译时错误).
例如,我想仅在派生类中添加特定的模板特化.
struct Base {
template <typename T> void Method(T a) {
T b;
}
template <> void Method<int>(int a) {
float c;
}
};
struct Derived : public Base {
template <> void Method<float>(float a) {
float x;
}
};
Run Code Online (Sandbox Code Playgroud) IsEmpty为类似容器的类实现语句的首选方法是什么?
它可能是一个简单的方法,bool IsEmpty()或者你可以有一些gettable属性IsEmpty/ Empty.
我理解这可能是个人选择的问题,但在这种情况下你会坚持使用属性或方法吗?
垃圾收集器是否会自动释放与某些实例关联的非托管资源(实际上是什么)IDisposable,例如,如果我忘记编写using语句?
很显然,我不知道何时会发生这种事,但它是精离开IDisposable的GC时候我不关心这些资源,我很好,他们将被安置最终?
最近我在一个项目中看到了很多类似的代码块,它们按以下方式编写:
String usedAlphabet = "x3w4tnu34urgbgierg";
byte c = // (something initialized earlier)
return usedAlphabet[(int)(c / 16)];
Run Code Online (Sandbox Code Playgroud)
现在,(int)在访问相应的数组时使用强制转换的原因是什么?
对我而言,这似乎是多余的,但我可能错了,或者我可能缺乏关于类型铸造机制的知识.
为什么以下代码编译C++11而不在C++03?(两个gcc和cl)
#include <string>
#include <iostream>
#include <fstream>
int main(int argc, char* argv[]) {
const std::string t("Hello");
std::ofstream out(t);
}
Run Code Online (Sandbox Code Playgroud)
为什么C++03流不接受std::string构造函数参数?这个决定是基于某些事情还是偶然发生的?
有没有可能让我的C++应用程序在一台机器上运行而不需要Microsoft Visual C++ 2008 Redistributable Package在程序文件夹中包含一些dll?
我想让我的应用程序尽可能便携,并希望避免forced安装运行时,所以它可能吗?
我不关心可能的未来运行时.dll更新和其他相关的麻烦,我只是想为我的应用程序提供它可能需要的一切(在每台Windows XP+机器上).有人面临同样的问题吗?
谢谢.
c++ ×5
c# ×3
templates ×2
3d ×1
arrays ×1
boost ×1
c++03 ×1
c++11 ×1
casting ×1
debugging ×1
disposable ×1
fstream ×1
geometry ×1
idisposable ×1
is-empty ×1
optimization ×1
packaging ×1
properties ×1
rendering ×1
runtime ×1
shared-ptr ×1
visual-c++ ×1