这里有一些我认识的可能是可能但我从未设法做过
在VS2005(C++)中,在调试时,能够从我正在调试的代码中调用一个函数.
在调试复杂数据结构时,此功能有时是必不可少的,这些数据结构只能使用监视窗口的常规功能轻松探索.
监视窗口似乎允许编写函数调用,但每次我尝试它时都会给我一个错误或另一个错误.
Error: symbol "func" not found
Error: argument list does not match function
Error: member function not present
有没有人成功地使这项工作正常?我在这里错过了什么?
编辑:显然,调用的函数应该是调试器所在的当前范围中存在的符号.
我有一个随机的2D图像和稀疏的像素分散.
给定图像上的一个点,我需要找到距离背景颜色最近的像素的距离(黑色).
最快的方法是什么?
我能想出的唯一方法是为像素构建一个kd树.但我真的想避免这种昂贵的预处理.而且,似乎一棵kd树给了我超过我需要的东西.我只需要与某种东西的距离,我不关心这是什么东西.
我gluDisk()在我的场景中使用平面磁盘.gluDisk()绘制面向正Z轴的磁盘,但我希望它面对一些任意正常的我.
显然,我需要使用glRotate()以使磁盘正确面对,但旋转应该是什么?我记得这可以用Quaternions计算,但我似乎无法记住数学.
我刚刚将原生C++项目从VS2005-SP1升级到VS2008-SP1
我测试的第一件事是对应用程序的一个非常基本的功能测试,我注意到的第一件事是主数字运算算法执行速度慢三倍VS2008二进制文件.
我再次测试VS2005二进制文件,以确保没有任何其他差异,它仍然像以前一样执行.
有没有人偶然发现这个?
c++ optimization performance visual-studio-2005 visual-studio-2008
我有一个带有颜色和深度附件的FBO对象,我将其呈现,然后从使用中读取glReadPixels(),我正在尝试添加多重采样支持.
而不是glRenderbufferStorage()我要求glRenderbufferStorageMultisampleEXT()颜色附件和深度附件.帧缓冲区对象似乎已成功创建并报告为完成.
渲染后我试图用它读取glReadPixels().当样本数为0时,即多重采样禁用,它完美地工作,我得到我想要的图像.当我将样本数量设置为其他东西时,比如4,帧缓冲区仍然构造正常但是glReadPixels()失败了INVALID_OPERATION
任何人都知道这里有什么问题吗?
编辑:glReadPixels的代码:
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, ptr);
Run Code Online (Sandbox Code Playgroud)
其中ptr指向一个宽度为*height uints的数组.
我有一个名为exe的exe test.exe,它通常用作独立的应用程序.我想在另一个应用程序app.exe中使用此exe作为模块(dll).
test.exe中的代码做了一些非常简单的事情:
void doTest()
{
MyClass *inst = new MyClass();
inst->someMethod();
}
Run Code Online (Sandbox Code Playgroud)
someMethod()虚拟和MyClass 在哪里有虚拟的.
doTest()从test.exe导出,因此创建了一个名为test.lib的lib,app.exe
与此lib链接,以便在启动时静态加载test.exe.
当我运行test.exe独立运行时它运行得很好但是当我运行它从app.exe中加载它崩溃了.
使用调试器进入代码后发现崩溃是在对虚方法的调用中.事实证明,vftable不知何故变坏了.
经过一些调查后发现,当MyClass的构造函数中的代码正在运行时,vftable是一回事,但是当new返回它的调用被替换为其他名为"local vftable"的东西时.我发现了这个模糊的讨论,为什么会这样.
经过大约一天的调试后,我发现这个"本地vftable"中的指针在两种情况下是相同的,当test.exe是独立的并且当它作为模块加载时.这可能是正确的,因为test.exe被加载到不同的地址...
为了测试这个理论,我将链接器选项中的加载地址更改为当app.exe在app.exe中时加载test.exe的地址一切顺利,瞧,一切正常.
显然,这不是一个永久的解决方案,因为下次这个随机选择的地址可能会被占用,同样的问题会再次出现.
所以我的问题:为什么这个"本地vftable"绑定到exe的静态加载地址?将exe作为模块加载是一件坏事吗?为什么exe假设它被加载到它的静态地址?
仅供上下文使用:这一切都是通过MSVC 2008,Windows XP x64完成的.
静态断言非常便于在编译时检查事物.一个简单的静态断言习惯用法如下:
template<bool> struct StaticAssert;
template<> struct StaticAssert<true> {};
#define STATIC_ASSERT(condition) do { StaticAssert<(condition)>(); } while(0)
Run Code Online (Sandbox Code Playgroud)
这对于像这样的东西很有用
STATIC_ASSERT(sizeof(float) == 4)
Run Code Online (Sandbox Code Playgroud)
和:
#define THIS_LIMIT (1000)
...
STATIC_ASSERT(THIS_LIMIT > OTHER_LIMIT);
Run Code Online (Sandbox Code Playgroud)
但是使用#define不是定义常量的"C++"方式.C++会让你使用匿名命名空间:
namespace {
const int THIS_LIMIT = 1000;
}
Run Code Online (Sandbox Code Playgroud)
甚至:
static const int THIS_LIMIT = 1000;
Run Code Online (Sandbox Code Playgroud)
这样做的问题在于,const int你不能使用STATIC_ASSERT(),你必须采用愚蠢的运行时检查.
有没有办法在当前的C++中正确解决这个问题?
我想我已经读过C++ 0x有一些工具可以做到这一点......
编辑
好的,这个
static const int THIS_LIMIT = 1000;
...
STATIC_ASSERT(THIS_LIMIT > 0);
Run Code Online (Sandbox Code Playgroud)
编译好
但是这个:
static const float THIS_LIMIT = 1000.0f;
...
STATIC_ASSERT(THIS_LIMIT > 0.0f);
Run Code Online (Sandbox Code Playgroud)
才不是.
(在Visual …
OpenGL ES中有没有办法在不重复每个三角形的每个顶点的情况下进行平面着色?
在常规的OpenGL中,这是完成的,glShadeModel但在ES中我编写了着色器,所以它并不那么简单.
GLSL 1.3或1.4(不确定)引入了flat似乎启用此功能的关键字,但遗憾的是ES 2.0还没有这个.
另一种方式做到这一点使用dFdx,dFdy功能,这,唉,还缺少ES.
我正在尝试编写一个工厂类,它将具有如下所示的标准接口:
Register<MyBase, MyDerived> g_regDerived("myderived"); // register to factory
Run Code Online (Sandbox Code Playgroud)
现在打电话:
auto* d = Factory<MyBase>::instance().create("myderived", 1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
将调用构造函数MyDerived(1,2,3)并返回指向创建的对象的指针
这听起来像C++ 11应该是可能的,但我无法弄清楚如何做到这一点.
从标准类型擦除工厂开始:
template<typename BaseT>
class Factory {
public:
static Factory* instance() {
static Factory inst;
return &inst;
}
template<typename T>
void reg(const string& name) {
m_stock[name].reset(new Creator<T>);
}
BaseT* create(const string& name) {
return m_stock[name]->create();
}
private:
struct ICreator {
virtual BaseT* create() = 0;
};
template<typename T>
struct Creator : public ICreator {
virtual BaseT* create() {
return new …Run Code Online (Sandbox Code Playgroud) 有没有办法给java编译器一些可以运行的java代码访问的变量?
在C/C++中,我可以给出编译-DKEY=VALUE,这将导致预处理器#define的KEY等于VALUE.然后,我可以在编译时检查此值以影响正在编译的代码.
我找到了java-D,但是将值赋予java命令行System.getProperty().我想在编译时给出一个参数,而不是调用时间.