C++ 11引入了<system_error>包含通用系统的头文件来处理错误代码.An std::error_code是一个元组,包含一个int错误代码和一个对a的引用std::error_category,它定义了错误域和错误代码的处理.标准库带有四个类别:std::generic_category,std::system_category,std::future_category,和std::iostream_category.
有冲突,在其上使用的类别,都在这里SO和C++的参考点,创建时std::error_codeS /投掷std::system_error以s errno和WinAPI的错误代码:
errnowith std::generic_category:SO answer,llvm-commits,cplusplus.comerrnowith std::system_category:SO answer,cppreference.comGetLastError()用std::generic_category:SO回答GetLastError()with std::system_category:SO回答,SO评论但是,errno并且GetLastError()不能使用相同的类别,否则一些错误代码将是不明确的.错误代码33是一个例子,因为它是EDOM和ERROR_LOCK_VIOLATION.
甚至有些地方主张WinAPI的用户制作类别,但我目前找不到任何引用.这种替代方案会特别痛苦.
哪些类别应与使用errno,并应搭配使用GetLastError(),使
std::error_code::default_error_condition()std::error_code::message()是否简单且适用于底层错误代码?
由于与代码组织相关的原因,我需要编译器接受以下(简化)代码:
fn f() {
let mut vec = Vec::new();
let a = 0;
vec.push(&a);
let b = 0;
vec.push(&b);
// Use `vec`
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨
error: `a` does not live long enough
--> src/main.rs:8:1
|
4 | vec.push(&a);
| - borrow occurs here
...
8 | }
| ^ `a` dropped here while still borrowed
|
= note: values in a scope are dropped in the opposite order they are created
error: `b` does not live long enough
--> src/main.rs:8:1
| …Run Code Online (Sandbox Code Playgroud) 我使用Git克隆了项目的源代码,Git在服务器上从SVN repo转换.这个Git存储库的问题是它缺少标签,分支,并且缺少一些修订.对于我来说,使用git-svn克隆的修订数量是巨大的(~20000),这会浪费带宽和时间,因为我已经拥有了本地仓库中的大多数对象.因此,我想知道:
我有一个小的http服务器,可以即时生成一些图像,生成过程可能需要一些时间.生成后,图像将被无限缓存.
目前,如果用户请求未缓存的图像,则服务器返回202 Accepted带有Refresh标题的图像.如果图像被缓存,301 Permanently Moved则发送a并且用户被重定向到唯一URL(不同的图像可以共享相同的唯一URL).
如果图像在<img>标签中引用(至少在Firefox上),整个系统就会中断.没有Javascript可以解决这个问题吗?如果没有,脚本会是什么样子?
我想用C++创建一个队列列表,但编译器给了我一些神秘的消息:
#include <list>
#include <queue>
class Test
{
[...]
list<queue> list_queue;
[...]
}
Run Code Online (Sandbox Code Playgroud)
输出:
error C2143: syntax error : missing ';' before '<'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2238: unexpected token(s) preceding ';'
Run Code Online (Sandbox Code Playgroud)
即使我使用int作为模板参数,它也会给出相同的错误.这是怎么回事?
(顺便说一下,我正在使用VC++ 2008 EE)
当我开始学习 Rust 时,我天真地假设 Rust 指向特征的指针就像 C++ 指向基类的指针一样实现,并编写了一些即使在这种假设下也能工作的代码。具体来说,我编写的代码与需要读取和查找流的 FFI 库接口,如下所示:
struct StreamParts {
reader: *mut Read,
seeker: *mut Seek,
}
fn new_ffi_object<T: Read + Seek + 'static>(stream: T) -> FFIObject {
let stream_ptr = Box::into_raw(Box::new(stream));
let stream_parts = Box::into_raw(Box::new(StreamParts {
reader: stream_ptr as *mut Read,
seeker: stream_ptr as *mut Seek,
}));
ffi_library::new_object(stream_parts, ffi_read, ffi_seek, ffi_close)
}
extern "C" fn ffi_read(stream_parts: *mut StreamParts, ...) -> c_ulong {
(*stream_parts.reader).read(...)
...
}
extern "C" fn ffi_seek(stream_parts: *mut StreamParts, ...) -> c_ulong {
(*stream_parts.seeker).seek(...)
... …Run Code Online (Sandbox Code Playgroud) 是否可以实际使用作为控制流模板传递的类型?我想编写一个使用模板的函数,模板又根据传递的类型调用另一个函数:
template <class T> void test_function (T var)
{
//Do stuff
if (T == char) {
bar (var);
} else {
foo (var);
}
//Do even more stuff
}
Run Code Online (Sandbox Code Playgroud)
如果没有,我将不得不回到枚举......
编辑:到目前为止,所有答案都建议我使用模板专业化.我不是很具体,但这与完全不使用模板是一样的,因为对于每种不同的类型,都有一个不同的函数调用.