c++14相关内容
我正在尝试编译发布在代码审查上的以下线程池程序以对其进行测试. https://codereview.stackexchange.com/questions/55100/platform-independant-thread-pool-v4 但我收到错误 threadpool.hpp:在成员函数‘std::future)(args)...))>中threadpool::enqueue
..
我想使用 std::experimental::optional,但 MSVS 2013 告诉我它找不到标题. 为什么它不在那里? 我可以根据其他地方的代码推出自己的代码吗?也许是 C++14 提案? 解决方案 std::experimental::optional 源自 Boost.Optional 库,该实现在 Visual C++ 12.0 中运行良好(尽管它有所不同 一点)
..
类似 (c++14) 的代码: struct S { int a;国际b;};C级{上市:C(char const*, size_t) {}//1C(S const&) {}//2C(S const*) {}//3模板C(T&& ...) {}//4//C(S) {}//5//C(S*) {}//6};S s { 1, 2 };C c1 { s };//调用 4 而不是 2C c2 { "abc
..
下面的代码有什么问题?运行时程序因未知异常中止 #include #include int main() {自动承诺 = std::promise{};auto future_one = promise.get_future();promise.set_value(1);返回0;} 错误输出为 在抛出'std::system_error'的实例后调用终止what(): 未知错误 -1
..
我的问题 在使用两个线程通过 asio::ip::tcp::iostream 发送和接收时,如何避免数据竞争? 设计 我正在编写一个使用 asio::ip::tcp::iostream 进行输入和输出的程序.该程序通过端口 5555 接受来自(远程)用户的命令,并通过相同的 TCP 连接向用户发送消息.因为这些事件(从用户接收的命令或发送给用户的消息)是异步发生的,所以我有单独的
..
GCC 4.x 不接受 C++14 代码的 --std=c++14 开关 - 它需要 --std=c++1y 代替.更高版本采用 --std=c++1z 但(可能)不是 --std=c++17 尚未设置(在 2016 年编写).也许 C++11 也有类似的问题. CMake 是否有一些工具(也许作为一个模块)来根据 GCC 版本传递正确的开关? 解决方案 当想要指定特定的 C++ 版
..
我需要在我的项目中添加一个“实验/文件系统"头 #include int main() {自动路径 = std::experimental::filesystem::current_path();返回0;} 所以我使用了 -lstdc++fs 标志并与 libstdc++fs.a 链接 cmake_minimum_required(VERSION 3.7)项目(testcpp)设置(CMAK
..
我想在编译时使用类型的名称.例如,假设我写了: constexpr size_t my_strlen(const char* s){常量字符* cp = s;while(*cp != '\0') { cp++;};返回cp-s;} 现在我想要: template constexpr auto type_name_length = my_strlen(typeid(T).name()); 但
..
使用 Boost.Spirit X3,我想解析逗号- 将范围和单个数字(例如 1-4、6、7、9-12)的分隔列表放入单个 std::vector.这是我想出的: 命名空间 ast {结构范围{int first_, last_;};使用 expr = std::vector;}命名空间解析器{模板auto as_rule = [](auto p) { return x3::rule{} = x
..
在 C++14 中,lambda 表达式可以通过使用捕获初始值设定项从变量中移动来捕获变量.然而,这使得生成的闭包对象不可复制.如果我有一个接受 std::function 参数的现有函数(我不能改变),我不能传递闭包对象,因为 std::function 的构造函数要求给定的函子是 CopyConstructible. #include #include void doit(std::func
..
我研究了通用 lambda 表达式,并稍微修改了示例,所以我的 lambda 应该捕获上层 lambda 的可变参数包.所以基本上什么是给上层 lambda 的 (auto&&...) - 应该以某种方式在 [=] 块中捕获. (完美转发是另一个问题,我很好奇这里有可能吗?) #include #include#include//基本情况void doPrint(std::ostream&
..
在 C++11 中编写递归 lambda 函数有一个经常重复的“技巧",如下所示: std::function阶乘;factorial = [&factorial](int n){ 返回 n (例如 C++0x 中的递归 lambda 函数.) 尽管这种技术有两个直接的缺点:std::function 对象的目标被绑定(通过引用捕获)到一个非常特殊的 std::function 对象(
..
可以通过访问它的 operator() 来推断非泛型 lambda 的 arity. template struct fInfo : fInfo{ };模板 struct fInfo{ static const int arity = sizeof...(Args);}; 这对于 [](int x){ re
..
在Boost邮件列表上,以下聪明的@LouisDionne 最近发布了创建类似元组的实体的技巧: #include 自动列表 = [](auto ...xs) {return [=](auto access) { return access(xs...);};};自动长度 = [](自动 xs) {return xs([](auto ...z) { return sizeof...(z); })
..
来自我继承的类的构造函数需要传入一个非平凡的对象.类似于: MyFoo::MyFoo() : SomeBase( complexstuff ){返回;} complexstuff 与 MyFoo 关系不大,所以我不想传入. 我没有编写某种返回 complexstuff 的 1-off 临时函数,而是使用了 lambda.我花了几分钟才弄清楚我必须调用 lambda.所以我的代码现在看起来
..
如果我们查看 草案 C++ 标准 部分 5.1.2 Lambda 表达式 段落 2 说(强调我的未来): 对 lambda 表达式的求值产生一个 prvalue 临时值 (12.2).这个临时对象称为闭包对象.lambda 表达式不得出现在未计算的操作数中(第 5 条).[注意:闭包对象的行为类似于函数对象(20.8).-尾注] 和部分 5.19 常量表达式 段落 2 说: 条件表达
..
templatevoid doSomething(T&& mStuff){auto lambda([&mStuff]{ doStuff(std::forward(mStuff)); });拉姆达();} 使用 &mStuff 语法捕获完美转发的 mStuff 变量是否正确? 或者对于完美转发的变量是否有特定的捕获语法? 编辑:如果完美转发的变量是参数包怎么办? 解决方案
..
是否可以通过 lambda 表达式中的 const 引用来捕获? 我希望下面标记的作业失败,例如: #include #include 使用命名空间标准;int main(){字符串字符串[] ={“你好",《世界》};静态常量 size_t num_strings = sizeof(strings)/sizeof(strings[0]);string best_string = "foo
..
在 C++11 之前,我经常使用 boost::bind 或 boost::lambda.bind 部分成为标准库(std::bind),另一部分成为核心语言(C++ lambdas)的一部分,并大量使用 lambdas更轻松.现在,我几乎不使用 std::bind,因为我几乎可以用 C++ lambda 做任何事情.我能想到的 std::bind 有一个有效的用例: struct foo{模板
..
我正在尝试从捕获移动的 lambda 表达式创建一个 std::function.请注意,我可以毫无问题地创建一个移动捕获 lambda 表达式;只有当我尝试将它包装在 std::function 中时,我才会收到错误. 例如: auto pi = std::make_unique(0);//这里没有问题!自动 foo = [q = std::move(pi)] {*q = 5;std::
..