我正在尝试使用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++接口,允许用户迭代从文件解码的对象.这种解码过程有点慢.
我正在考虑这个迭代器接口,但我想避免任何不必要的副本,所以我在考虑(用户方):
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,读取数据的方法也会返回副本(它们提取字符).
我有一个继承自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++ 代码构建成功:
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++ 标准报价或相关链接。