读取用于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无法做到吗?
我已经实现了一个功能,其中身份被赋予我并且不受我的控制.它回来了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) 在 gpb proto2 标量类型的描述中(https://developers.google.com/protocol-buffers/docs/proto#scalar)它说:
\n\n\n\n\n\n
\n- \n
整型32
\n\n使用可变长度编码。编码负\n 数字 \xe2\x80\x93 效率较低,如果您的字段可能有负值,请改用 sint32\n。
- \n
sint32
\n\n使用可变长度编码。有符号 int 值。这些比常规 int32 更有效地编码负数。
对于正值,sint32 与 int32 一样有效吗?
\n\n换句话说,有什么理由使用int32吗?
\n\n如果使用什么语言很重要,我只对 C++ 感兴趣。
\n我有cafeid =(1,2,3,4,5,6,7)和checkid =(1,3,5)
如何仅显示输出(2,4,6,7)?
有人可以为一个只有"游戏循环"的程序编写一个源代码,这个循环只会循环,直到你按下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
以下变量......
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>用其他东西替换每个?
我只是想知道如何擦除android模拟器中的虚拟SD卡.
我正在学习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)
我怀疑这是我的一个根本误解所以任何帮助将不胜感激.
我使用git commit --amend修改了之前的提交.在那之后,当我推动我的更改时,由于'not -fast-forward'错误,我被拒绝了.我找到了答案.不幸的是,如命令,git pull --rebase,git fetech origin不工作.如果我的本地仓库没有冲突,为什么我的推送失败了.