小编eep*_*epp的帖子

PostQuitMessage()是进入WM_DESTROY还是WM_CLOSE?

我正在尝试使用Win32 API创建一个非常基本的窗口,自从我完成此操作已经有很长一段时间了.

我认为我的消息循环没问题,但是当我关闭打开的窗口时,应用程序仍在运行.看起来消息循环永远不会得到WM_QUIT消息.但是,我正在打电话PostQuitMessage,一个消息框确认我打电话给它.

这个极简主义代码有什么问题?

#include <Windows.h>

LRESULT CALLBACK window_proc(HWND hwnd, UINT msg,
        WPARAM w_param, LPARAM l_param) {
    switch (msg) {
    case WM_DESTROY:
        MessageBox(NULL, L"destroy", L"info", MB_OK);
        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hwnd, msg, w_param, l_param);
    }

    return 0;
}

int CALLBACK WinMain(HINSTANCE h_instance, HINSTANCE h_prev_instance,
        LPSTR cmd_line, int n_cmd_show) {
    WNDCLASS wnd_class;
    HWND hwnd;
    MSG msg;
    BOOL ret;

    wnd_class.cbClsExtra = 0;
    wnd_class.cbWndExtra = 0;
    wnd_class.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
    wnd_class.hCursor = LoadCursor(NULL, IDC_ARROW);
    wnd_class.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wnd_class.hInstance …
Run Code Online (Sandbox Code Playgroud)

c windows winapi

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

在C++中,是否可以实现一个迭代器接口,其中提前使"current"元素无效?

我正在设计一个C++接口,允许用户迭代从文件解码的对象.这种解码过程有点慢.

我正在考虑这个迭代器接口,但我想避免任何不必要的副本,所以我在考虑(用户方):

for (const auto& object : file) {
    // you can access the members of `object` here
    std::cout << object.whatever() << std::endl;

    // you can copy `object` here
    myObjectCopy = object;

    // you CANNOT do this because `object` changes
    // as soon as the iterator advances
    myObjectPtr = &object;
}
Run Code Online (Sandbox Code Playgroud)

object 在前面的用法示例中,是对迭代器实例内部对象的引用.

这是错的吗?你会在这里建议其他什么惯用的接口?

我想过一个流接口(想想std::istream),但是AFAIK,读取数据的方法也会返回副本(它们提取字符).

c++ iterator api-design istream-iterator c++11

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

如何修改C++ runtime_error的字符串?

我有一个继承自std::runtime_error这样的类:

#include <string>
#include <stdexcept>

class SomeEx : public std::runtime_error
{
public:
    SomeEx(const std::string& msg) : runtime_error(msg) { }
};
Run Code Online (Sandbox Code Playgroud)

表示msg总是类似"无效的类型ID 43".有没有办法用另一个构造函数(或另一个方法)构建"什么字符串",以便我只提供整数类型ID?就像是:

SomeEx(unsigned int id) {
    // set what string to ("invalid type ID " + id)
}
Run Code Online (Sandbox Code Playgroud)

c++ runtime-error exception std

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

为什么此代码有效(具有无效非模板函数的 C++ 模板类)?

此 C++ 代码构建成功:

void h(int *)
{
}

template <typename T>
class A
{
public:
    void f()
    {
        T *val;
        
        h(val);
    }
};

int main()
{
    A<const int> a;
}
Run Code Online (Sandbox Code Playgroud)

为什么?

不可否认,这A<const int>::f()行不通。

如果您调用a.f(),它将无法按预期构建。

那为什么A<const int>甚至允许存在一个实例呢?

我不确定 SFINAE 在这里如何适用。

我很感激 C++ 标准报价或相关链接。

c++ templates

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