小编Mar*_*n G的帖子

为什么要弃用bind()?

读取用于C++ 17的建议有关删除标准的一些过时,旧的和未使用的部分(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4190.htm)我找到D.9部分有点奇怪:

D.9"粘合剂"[depr.lib.binders]

这定义了bind1st()/ bind2nd(),它们被bind()严格取代.(在将来,我会认为,bind()的本身已被lambda表达式,尤其是通用的Lambda表达式取代,所以绑定()应该被废弃,但不是此提案的一部分.)

我没有得到的是关于bind()自己被lambdas取代的评论.

如果我有课:

class A
{
  public:
    void f(int a){}
    void f(int a, int b){}
}
Run Code Online (Sandbox Code Playgroud)

而且我想将一个函数指针传递A::f给某个函数,someFunction以便这个函数可以在实例化的对象上调用它A,我声明someFunction:

void someFunction(const std::function<void(int, int)>&);
Run Code Online (Sandbox Code Playgroud)

并称之为:

A a;
someFunction(std::bind(static_cast<void (A::*)(int, int)> (&A::f),
                       std::ref(a), 
                       std::placeholders::_1,
                       std::placeholders::_2));
Run Code Online (Sandbox Code Playgroud)

如何使用lambda实现相同的功能?真的没有什么bind()可以做的,用lambda无法做到吗?

c++ lambda stdbind std-function

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

正确的方法来为std :: shared_ptr分配内存

我已经实现了一个功能,其中身份被赋予我并且不受我的控制.它回来了std::shared_ptr<const void>.在函数中,我分配了任意数量的内存,并通过shared_ptr返回对它的访问.

我的内存分配完成了new unsigned char[123].问题是valgrind检测到new和delete变体的使用不匹配.当我new[](unsigned)用来分配内存时,shared_ptr析构函数delete(void*)用来释放它,而valgrind会在你使用"不正确"的deallocator进行分配时发出警告.

在更实际的术语中,我写了这个测试用例来表明我的意思:

TEST(Example, Test1)
{
  unsigned char* mem = new unsigned char[123];
  std::shared_ptr<const void> ptr(mem);
}
Run Code Online (Sandbox Code Playgroud)

valgrind的报告说

==45794== Mismatched free() / delete / delete []
==45794==    at 0x4C2A64B: operator delete(void*) (vg_replace_malloc.c:576)
==45794==    by 0x40B7B5: _M_release (shared_ptr_base.h:150)
==45794==    by 0x40B7B5: ~__shared_count (shared_ptr_base.h:659)
==45794==    by 0x40B7B5: ~__shared_ptr (shared_ptr_base.h:925)
==45794==    by 0x40B7B5: ~shared_ptr (shared_ptr.h:93)
==45794==    by 0x40B7B5: Example_Test1_Test::TestBody() (test.cc:108)
==45794==  Address 0x5cb6290 is 0 bytes inside a block of size 123 …
Run Code Online (Sandbox Code Playgroud)

c++ memory-management shared-ptr c++11

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

在 protobuf 中使用 int32 的原因

在 gpb proto2 标量类型的描述中(https://developers.google.com/protocol-buffers/docs/proto#scalar)它说:

\n\n
\n
    \n
  • 整型32

    \n\n

    使用可变长度编码。编码负\n 数字 \xe2\x80\x93 效率较低,如果您的字段可能有负值,请改用 sint32\n。

  • \n
  • sint32

    \n\n

    使用可变长度编码。有符号 int 值。这些比常规 int32 更有效地编码负数。

  • \n
\n
\n\n

对于正值,sint32 与 int32 一样有效吗?

\n\n

换句话说,有什么理由使用int32吗?

\n\n

如果使用什么语言很重要,我只对 C++ 感兴趣。

\n

c++ protocol-buffers

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

如何通过php在数组中找到不同的值?

我有cafeid =(1,2,3,4,5,6,7)和checkid =(1,3,5)

如何仅显示输出(2,4,6,7)?

php mysql compare

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

C++游戏循环示例

有人可以为一个只有"游戏循环"的程序编写一个源代码,这个循环只会循环,直到你按下Esc,程序会显示一个基本的图像.下面是我现在拥有的源代码,但我必须使用SDL_Delay(2000);该程序保持活动2秒,在此期间程序被冻结.

#include "SDL.h"

int main(int argc, char* args[]) {

    SDL_Surface* hello = NULL;
    SDL_Surface* screen = NULL;

    SDL_Init(SDL_INIT_EVERYTHING);

    screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);

    hello = SDL_LoadBMP("hello.bmp");

    SDL_BlitSurface(hello, NULL, screen, NULL);

    SDL_Flip(screen);

    SDL_Delay(2000);

    SDL_FreeSurface(hello);

    SDL_Quit();

    return 0;

}
Run Code Online (Sandbox Code Playgroud)

我只想让程序打开,直到我按下Esc.我知道循环是如何工作的,我只是不知道我是在main()函数内部实现还是在函数内部实现.我试过了两次,两次都失败了.如果你能帮助我,那就太棒了:P

c++ sdl game-loop

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

以下代码片段(在C中)打印什么?

以下代码片段(在C中)打印什么?

int a = 033;
printf("%d", a + 1);
Run Code Online (Sandbox Code Playgroud)

c printf fragment

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

jquery/javascript:替换html()里面的字符串?

以下变量......

var breadcrumbs = $('#trail').html();
Run Code Online (Sandbox Code Playgroud)

...包含:

<href="page1/">Page 1</a> <strong>»</strong> <a href="page2">Page 2</a> <strong>»</strong> <a href="page3">Page 3</a>

如何<strong>»</strong>用其他东西替换每个?

javascript jquery replace

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

如何格式化/擦除模拟器的SDCARD(/ mnt/sdcard)

我只是想知道如何擦除android模拟器中的虚拟SD卡.

android android-emulator

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

D语言函数调用参数

我正在学习D并且在C#方面经验丰富.具体来说,我正在尝试使用Derelict3绑定到SDL2.我已经能够使一些基本功能正常工作,但我已经厌倦了如何为特定调用创建数组参数.

该库包含一个电话

SDL_RenderDrawLines(SDL_Renderer*, const(SDL_Point)*, int)  //Derelict3 Binding
Run Code Online (Sandbox Code Playgroud)

我无法正确地形成论据

const(SDL_Point)*
Run Code Online (Sandbox Code Playgroud)

此函数的SDL文档声明此参数是一个数组SDL_Point,但我不清楚如何创建一个适当的数组来传递给这个函数.

这是我目前所拥有的一个例子:

void DrawShape(SDL_Renderer* renderer)
{
    SDL_Point a = { x:10, y:10};
    SDL_Point b = { x:500, y:500};

    const(SDL_Point[2]) points = [a,b];

    Uint8 q = 255;
    SDL_SetRenderDrawColor(renderer,q,q,q,q);
    SDL_RenderDrawLines(renderer,points,1);
}
Run Code Online (Sandbox Code Playgroud)

并且编译器抱怨我没有为const(SDL_Point)*in 传递正确类型的参数points.

Error: function pointer SDL_RenderDrawLines (SDL_Renderer*, const(SDL_Point)*, int)
is not callable using argument types (SDL_Renderer*, const(SDL_Point[2u]), int)
Run Code Online (Sandbox Code Playgroud)

我怀疑这是我的一个根本误解所以任何帮助将不胜感激.

sdl d derelict3 sdl-2

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

Git commit --amend后Git not-fast-forward错误

我使用git commit --amend修改了之前的提交.在那之后,当我推动我的更改时,由于'not -fast-forward'错误,我被拒绝了.我找到了答案.不幸的是,如命令,git pull --rebase,git fetech origin不工作.如果我的本地仓库没有冲突,为什么我的推送失败了.

git git-amend git-commands

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