小编Iva*_*kov的帖子

如何让构造函数每次调用时创建不同的 lambda?

我有这个简单的代码:

#include <iostream>
#include <functional>

class a {
public:
    a() {
        func = [] {
            static int i = 0;
            i++;
            std::cout << i << std::endl;
        };
    }
    std::function<void()> func;
};

int main()
{
    a a1;
    a1.func();
    a a2;
    a2.func();
}
Run Code Online (Sandbox Code Playgroud)

我期望这样的输出:

1
1
Run Code Online (Sandbox Code Playgroud)

但它却是:

1
2
Run Code Online (Sandbox Code Playgroud)

然后我检查了两个实例中 lambda 表达式的内存地址a,它们是相同的。这意味着 lambda 创建一次,然后在所有实例中使用。我正在寻找的是让构造函数每次被调用时都创建一个不同的 lambda。我关闭了编译器优化,但没有效果。

信息:我正在使用 MSVC。

c++ lambda constructor

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

在 Win32 编辑控件上设置扩展样式

是否可以在编辑控件上设置扩展样式(简单编辑,而不是丰富编辑)?例如我想将扩展样式设置为WS_EX_ZOOMABLE | WS_EX_ALLOWEOL_ALL. 控件的创建如下:

HWND hEdit = CreateWindowExW(
        ES_EX_ZOOMABLE | ES_EX_ALLOWEOL_ALL,
        L"EDIT",
        L"",
        WS_BORDER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,
        0, 0, 100, 100,
        hWndMain, (HMENU)ID_EDIT, hInstance, NULL
    );
Run Code Online (Sandbox Code Playgroud)

问题是所有扩展样式都不起作用。是EOL静止的CR LF并且控件不可缩放。

c c++ winapi editcontrol

0
推荐指数
1
解决办法
659
查看次数

标签 统计

c++ ×2

c ×1

constructor ×1

editcontrol ×1

lambda ×1

winapi ×1