小编Anc*_*rio的帖子

C++:为什么必须声明私有函数?

为什么C++中的类必须声明它们的私有函数?它有实际的技术原因(它在编译时的作用是什么)还是仅仅为了一致性?

c++ private class declaration function

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

SDL 2.0:在主线程中创建窗口,但在单独的线程中完成所有渲染

这是我目前的设置:我正在使用SDL进行OpenGL渲染(目前在Linux上).我初始化SDL(SDL_Init)并SDL_CreateWindow在主线程中创建应用程序窗口()并将其传递给第二个线程.第二个线程从it(SDL_GL_CreateContext)创建一个OpenGL上下文并启动一个渲染循环,而主线程侦听事件.我认为重要的是要注意GL调用完全局限于第二个线程; 实际上我的大多数应用程序逻辑都在那里发生,主线程实际上只负责处理通过SDL传入的事件.

最初我反过来做了这个,但事实证明你不能处理除了OSX上的主线程以及可能还有Windows之外的任何事件,所以我将其切换为将来兼容这两个.

我是否有任何担心这不适用于OSX/Windows?在Linux上,我没有任何东西.互联网上有很多关于上下文共享和从多个线程进行GL调用的信息,但我想要做的就是在一个不是主线程的线程中做OpenGL.我不想继续编写我的应用程序编码,以后发现它不会在其他地方工作.

windows opengl macos multithreading sdl

19
推荐指数
1
解决办法
4854
查看次数

C++:正确覆盖模板类中的虚函数

考虑以下代码:

template<typename T>
struct MyTempl
{
    virtual void doStuff(const T &value) = 0;
};

struct MyImpl : MyTempl<int>
{
    void doStuff(const int &value) {}
};

struct MyPtrImpl : MyTempl<int*>
{
    void doStuff(const int* &value) {}
};

MyImpl imp1;
MyPtrImpl imp2;
Run Code Online (Sandbox Code Playgroud)

这将无法正确编译:编译器告诉我doStuff()in MyPtrImpl是纯虚拟的,即.我未能正确覆盖它.但是,如果我将typedef设置int*为类似的东西int_ptr,并将其用作模板参数MyPtrImpl,那么一切都会成功.

为什么编译器在没有typedef的情况下无法扣除我的意图?

c++ virtual templates pointers reference

14
推荐指数
1
解决办法
5502
查看次数

qmake:额外的编译器(处理步骤)?

在我基于 qmake 的项目中,我想在编译之前对某些文件运行“xxd”。根据文档,我的 pro 文件中的相关部分如下所示:

SHADERS = shader/tone.frag \
          shader/trans.frag \
          shader/hue.frag

# xxd
xxd.output = ${QMAKE_FILE_NAME}.xxd
xxd.commands = xxd -i ${QMAKE_FILE_NAME} > ${QMAKE_FILE_OUT}
xxd.depends = SHADERS
xxd.input = $$SHADERS
xxd.variable_out = HEADERS

QMAKE_EXTRA_COMPILERS += xxd
Run Code Online (Sandbox Code Playgroud)

Qmake 不会抱怨,但它也根本不运行 xxd。我是否必须为要预处理的每个文件创建特殊目标?(生成的*.xxd文件不会我事后编译,只包含在其他cpp文件中)

编辑:在 smokris 的帮助下,这就是我修复 pro 文件中的部分的方法:

# xxd
xxd.output = ${QMAKE_FILE_NAME}.xxd
xxd.commands = xxd -i ${QMAKE_FILE_NAME} > ${QMAKE_FILE_OUT}
xxd.depends = $$SHADERS
xxd.input = SHADERS
xxd.variable_out = HEADERS
Run Code Online (Sandbox Code Playgroud)

compiler-construction qmake extra xxd

5
推荐指数
1
解决办法
3843
查看次数

Lua:'对'不会迭代[1]

我很快就调试了一些东西,并编写了以下函数:

function dumpTable(t)
    for i,v in pairs(t) do
        if type(v) == "table" then
            dumpTable(v)
        else
            print(i..":", v)
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

现在,出于某种原因

dumpTable({[1]="hello??", [2]="two", {[132]="something", [3.2]="else"}})
Run Code Online (Sandbox Code Playgroud)

输出

132:    something
3.2:    else
2:  two
Run Code Online (Sandbox Code Playgroud)

注意第一个字符串是如何丢失的?但如果我改变它的钥匙..

dumpTable({["one"]="hello??", [2]="two", {[132]="something", [3.2]="else"}})
Run Code Online (Sandbox Code Playgroud)

它输出

132:    something
3.2:    else
one:    hello??
2:  two
Run Code Online (Sandbox Code Playgroud)

这是如此不直观,我几乎觉得自己是个白痴,没有看到错误..

(顺便说一句.我知道如果表包含递归引用,我的函数将溢出堆栈,稍后将修复它)

lua iterator lua-table

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