小编Nic*_*ton的帖子

在库中使用的最佳头结构是什么?

关于库中的标题,我看到两个选项,我不确定选择是否真的重要.假设我创建了一个库,让我们调用它foobar.请帮我选择最合适的选项:

  1. 有一个包含在库项目的根目录中,我们可以调用它foobar.h,其中包括库中的所有头文件,例如"src/some_namespace/SomeClass.h"等等.然后从库外部,在我想要使用任何与foobar库有关的文件中,只是#include <foobar.h>.

  2. 没有主要的包含,而只包括我要在我使用它们的地方所需的标题,所以我可能在源文件中有一大堆包含.由于我使用的命名空间有时甚至高达3,所以包括标题看起来像是一件苦差事.

我选择了选项1,因为它实现起来非常简单.OpenGL和许多其他库似乎都这样做,所以它似乎合情合理.但是,标准的C++库可以要求我在任何给定的文件中包含多个头文件,为什么它们只有一个头文件呢?除非是我和白痴,他们是独立的图书馆......

更新:

更进一步的答案,我认为提供两种选择是正确的,对吗?如果我想使用std :: string但是必须包含大量的头文件,我会非常恼火; 那会很傻.另一方面,如果#include当我想要使用大部分图书馆时必须输入大量的线条,我会感到恼火.

转发标头:

感谢所有向我提供前向标题的建议,这有助于我让丛林丛林变得更加复杂!:)

c++ header

4
推荐指数
2
解决办法
771
查看次数

我是否应该担心"条件跳转或移动取决于未初始化的值"?

如果您使用过Memcheck(来自Valgrind),您可能会熟悉这条消息......

条件跳转或移动取决于未初始化的值

我已经读过这个,当你使用未初始化的值时,它就会发生.

MyClass s;
s.DoStuff();
Run Code Online (Sandbox Code Playgroud)

这样可以工作,因为它s是自动初始化的...所以如果是这样的话,它可以工作,为什么Memcheck告诉我它没有初始化?信息应该被忽略吗?

也许我误解了错误指示我的位置.从Valgrind手册中,实际的错误片段是......

int main()
{
  int x;
  printf ("x = %d\n", x);
}
Run Code Online (Sandbox Code Playgroud)

但是,在我的代码中,我看不到类似的东西.我注意到,堆栈顶部的函数跟踪Memcheck显示我是一个虚函数; 这可能与它有关吗?

==14446== Conditional jump or move depends on uninitialised value(s)
==14446==    at 0x414164: vimrid::glut::GlutApplication::FinishRender() (GlutApplication.cpp:120)
==14446==    by 0x422434: vimrid::demos::filterdemos::FilterDemo3::Render() (FilterDemo3.cpp:260)
==14446==    by 0x412D3D: vimrid::VimridApplication::UpdateAndRender() (VimridApplication.cpp:93)
==14446==    by 0x4144BA: vimrid::glut::GlutApplication::glutHandleDisplay() (GlutApplication.cpp:201)
==14446==    by 0x41486A: vimrid::glut::GlutApplication::glutCallbackDisplay() (GlutApplication.cpp:277)
==14446==    by 0x54D9FAA: (within /usr/lib64/libglut.so.3.8.0)
==14446==    by 0x54DDA4A: fgEnumWindows (in /usr/lib64/libglut.so.3.8.0)
==14446==    by 0x54DA4A3: glutMainLoopEvent (in /usr/lib64/libglut.so.3.8.0)
==14446==    by 0x54DAEB5: glutMainLoop (in /usr/lib64/libglut.so.3.8.0) …
Run Code Online (Sandbox Code Playgroud)

c++ valgrind memcheck

4
推荐指数
2
解决办法
2万
查看次数

将Google App Engine数据存储导出到MySQL?

我们正在考虑在Google App Engine上构建一些基础架构.但是我们担心如果它不能扩展,我们将来需要导出数据并在我们自己的服务器上运行它.

有没有办法从App Engine数据存储区导出到MySQL?

mysql google-app-engine google-cloud-datastore

4
推荐指数
1
解决办法
1826
查看次数

为什么我在尝试 http post 时收到 CURLE_URL_MALFORMAT?

这是代码(从现有应用程序中提取):

CURL *curl = curl_easy_init();
_ASSERTE(curl);

string url = "http://127.0.0.1:8000/";

char *data = "mode=test";
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
curl_easy_setopt(curl, CURLOPT_URL, url);
CURLcode res = curl_easy_perform(curl);

bool success = (res == CURLE_OK);

curl_easy_cleanup(curl);
Run Code Online (Sandbox Code Playgroud)

res的值为CURLE_URL_MALFORMAT。这个URL与curl不兼容吗?

post curl http

4
推荐指数
1
解决办法
1万
查看次数

为什么在使用`do`函数时无法加载Perl库?

我是Perl的新手,我正在更新一个旧的Perl网站.每个.pl文件似乎都在顶部有这一行:

do "func.inc";
Run Code Online (Sandbox Code Playgroud)

所以我想我可以使用这个文件来标记子程序以供全局使用.

func.inc

#!/usr/bin/perl
sub foobar
{
    return "Hello world";
}
Run Code Online (Sandbox Code Playgroud)

index.pl

#!/usr/bin/perl
do "func.inc";
print "Content-type: text/html\n\n";
print foobar();
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误:

Undefined subroutine &main::foobar called at /path/to/index.pl line 4.
Run Code Online (Sandbox Code Playgroud)

这两个文件都在同一个目录中,并且func.inc已经有整个网站使用的sub的音调.但是,该脚本适用于Linux生产环境,但不适用于我的Windows 7开发环境(我正在使用ActivePerl).

更新:

看起来文件没有被包含在内; 如果使用绝对路径包含文件,则子工作正常...

do "C:/path/to/func.inc";
Run Code Online (Sandbox Code Playgroud)

...所以看起来相对路径不适用于我的本地开发环境,但它们可以在生产环境中工作.但这对我没有好处,因为我的开发机器上的绝对路径不适用于实时服务器.

如何do在Windows 7开发机器上使用相对路径开始工作?

更新2:

我正在使用Perl -T开关.不幸的是,这删除了"." 来自@INC,因此阻止我们使用相对路径do.我删除了此开关,旧代码现在正在运行.我知道这不是好习惯,但不幸的是我正在处理旧代码,所以我似乎别无选择.

perl subroutine

4
推荐指数
1
解决办法
1327
查看次数

如何处理Python XML-RPC输出和异常?

我已经创建了一个简单的Python XML-RPC实现,主要基于这些示例.

但是,它发送如下输出:

foo.bar.com - - [13/Feb/2010 17:55:47] "POST /RPC2 HTTP/1.0" 200 -
Run Code Online (Sandbox Code Playgroud)

...到终端,即使我使用>>或将标准输出和标准错误重定向到文件>.我正在使用以下行:

python foobar 2>&1 >> foobar.log
Run Code Online (Sandbox Code Playgroud)

看起来它似乎不是标准输出,而是其他地方.

此外,当收到请求时发生异常时,整个应用程序崩溃时出现此错误:

----------------------------------------
Exception happened during processing of request from ('1.2.3.4', 51284)
Run Code Online (Sandbox Code Playgroud)

我该如何处理这个异常?我需要优雅地恢复,只记录异常消息而不是服务器崩溃.

python xml-rpc

4
推荐指数
1
解决办法
2039
查看次数

是否值得开始一个新的开源项目或加入?

有一些我不是特别满意的各种开源项目,例如,我认为与Windows相比,Linux上声音的各个方面简直令人震惊.我知道这是因为声卡制造商为Windows制造了他们的硬件,并且支持是如此糟糕可能是他们的错.但我相信我们可以做得更好,对吗?

例如,我发现pulseaudio是非常错误的.我试图让pulseaudio在我的网络上运行(所以我可以分享我的扬声器)然而,由于已经存在多年的大量"已知错误",这不起作用.

此外,另一个抱怨是Skype指责Pulseaudio为Skype的糟糕支持.

我的问题是,是否值得开始一个新的Linux声音项目(并可能增加混乱),或通过提交补丁来帮助pulseaudio?

linux audio open-source pulseaudio

3
推荐指数
3
解决办法
353
查看次数

如何在glTexImage2D中使用动态大小的纹理数组?

目前,我能够加载我创建的静态大小的纹理.在这种情况下,它是512 x 512.

此代码来自标头:

#define TEXTURE_WIDTH 512
#define TEXTURE_HEIGHT 512

GLubyte textureArray[TEXTURE_HEIGHT][TEXTURE_WIDTH][4];
Run Code Online (Sandbox Code Playgroud)

这是glTexImage2D的用法:

glTexImage2D(
    GL_TEXTURE_2D, 0, GL_RGBA,
    TEXTURE_WIDTH, TEXTURE_HEIGHT,
    0, GL_RGBA, GL_UNSIGNED_BYTE, textureArray);
Run Code Online (Sandbox Code Playgroud)

这是我如何填充数组(粗略的例子,不是我的代码中的精确副本):

for (int i = 0; i < getTexturePixelCount(); i++)
{
    textureArray[column][row][0] = (GLubyte)pixelValue1;
    textureArray[column][row][1] = (GLubyte)pixelValue2;
    textureArray[column][row][2] = (GLubyte)pixelValue3;
    textureArray[column][row][3] = (GLubyte)pixelValue4;
}
Run Code Online (Sandbox Code Playgroud)

如何更改它以便不需要TEXTURE_WIDTH和TEXTURE_HEIGHT?也许我可以使用指针样式数组并动态分配内存...

编辑:

我想我看到了问题,在C++中它无法真正完成.Budric指出的工作是使用单维数组,但使用所有3个维度乘以表示索引:

GLbyte *array = new GLbyte[xMax * yMax * zMax];
Run Code Online (Sandbox Code Playgroud)

要访问,例如1/2/3的x/y/z,您需要执行以下操作:

GLbyte byte = array[1 * 2 * 3];
Run Code Online (Sandbox Code Playgroud)

但问题是,我不认为该glTexImage2D功能支持这一点.任何人都可以想到一个可以使用这个OpenGL函数的解决方法吗?

编辑2:

注意OpenGL开发人员,这可以通过使用单维像素数组来克服......

[0]:列0> [1]:行0> [2]:通道0 ... n> [n]:行1 ... …

c++ opengl glteximage2d

3
推荐指数
1
解决办法
5083
查看次数

作为一个典型的IDE用户,我应该对传统编辑感兴趣吗?

我使用完整的图形化IDE,如Eclipse CDT(Linux)和Visual Studio(Windows),它们具有自动完成,内置调试等功能.这些功能让我觉得我不能没有.

我一直听说有多少人每天使用emacs/vim.当图形IDE看起来更容易使用时,为什么人们仍然使用基于控制台的编辑器?我知道如何使用vim和emacs,但对于日常编程我只使用IDE,因为我发现自己的工作效率更高.

不是一个vim vs emacs问题所以请不要争论另一个,请反对思科图形IDE反对控制台IDE.

由于我已经熟悉图形IDE,我是否可以通过使用emacs/vim获得任何生产优势?

我希望答案是"可能不是",仅仅是因为学习曲线,我会想念通常的图形IDE功能,如自动完成和内置调试器 ; 但显然emacs支持自动完成和调试.但是,对于使用标准GUI文本编辑器的人,我可能会说他们应该使用emacs/vim.你怎么看?

相关问题:

ide vim emacs eclipse-cdt

3
推荐指数
1
解决办法
1021
查看次数

为什么Valgrind声称我的std :: map <T,T>的实现会产生内存泄漏?

Valgrind正在输出以下内容:

==14446== 2,976 (176 direct, 2,800 indirect) bytes in 2 blocks are definitely lost in loss record 23 of 33
==14446==    at 0x4C2506C: operator new(unsigned long) (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
==14446==    by 0x41C487: __gnu_cxx::new_allocator<std::_Rb_tree_node<std::pair<unsigned const, vimrid::imaging::ImageMatrixColumn> > >::allocate(unsigned long, void const*) (new_allocator.h:92)
==14446==    by 0x41C4AB: std::_Rb_tree<unsigned, std::pair<unsigned const, vimrid::imaging::ImageMatrixColumn>, std::_Select1st<std::pair<unsigned const, vimrid::imaging::ImageMatrixColumn> >, std::less<unsigned>, std::allocator<std::pair<unsigned const, vimrid::imaging::ImageMatrixColumn> > >::_M_get_node() (stl_tree.h:357)
==14446==    by 0x41C915: std::_Rb_tree<unsigned, std::pair<unsigned const, vimrid::imaging::ImageMatrixColumn>, std::_Select1st<std::pair<unsigned const, vimrid::imaging::ImageMatrixColumn> >, std::less<unsigned>, std::allocator<std::pair<unsigned const, vimrid::imaging::ImageMatrixColumn> > >::_M_create_node(std::pair<unsigned const, vimrid::imaging::ImageMatrixColumn> const&) (stl_tree.h:366)
==14446== …
Run Code Online (Sandbox Code Playgroud)

c++ valgrind

3
推荐指数
1
解决办法
2667
查看次数