异步不会在Visual Studio 2015中调用move构造函数

维沙库尔

我在Visual Studio 2015社区上编译包含以下内容的代码时遇到问题

auto f = async(launch::async,                  
          &WorkerThread<Hash>::run,                 
          WorkerThread<Hash>(mInputFile, mOutputFile),
          i, numthreads, mBlockSize);                   
futures.push_back(std::move(f));    

嗯,类似的问题在这里已经问过数十遍了,但是通常问题是std::move某个地方不存在

模板类WorkerThread<Hash>不可复制(已删除复制构造函数和复制赋值运算符),但可移动。上面的代码产生了C2280: "WorkerThread<Hash>::WorkerThread(const WorkerThread<Hash> &)": attempted to reference deleted function(这是我的翻译)。

似乎默认情况下它没有生成move构造函数,这对我来说很好。当我将它们显式设置为时default,会遇到相同的错误,但现在它指向std::_Binder<std::_Unforced,_Ty,WorkerThread<Hash>,unsigned int,unsigned int,__int64>::_Binder(const std::_Binder<std::_Unforced,_Ty,WorkerThread<Hash>,unsigned int,unsigned int,__int64> &)

任何想法都非常欢迎。

更新:MCVE

如果您有上述编译器,请尝试对其进行编译并报告结果。我认为这可能是我的安装问题。

#include<future>
#include<memory>


class Foo {
public:
    Foo() :mData(new int[100]) {}
    void run() {}
private:
    std::unique_ptr<int[]> mData;
};


int main()
{
    auto f = std::async(std::launch::async, &Foo::run, Foo());
    f.get();
}
TC

编辑:该错误已在MSVC 2015 Update 2中修复。

这是一个MSVC错误(提示为查找报告的提示@bogdan)。它的async(和packaged_task,似乎)实现将函子存储到中std::function,它不支持仅移动类型-因此无法在符合条件的实现中使用。

一个简单的解决方法是改为使用shared_ptr

auto f = async(launch::async,                  
          &WorkerThread<Hash>::run,                 
          std::make_shared<WorkerThread<Hash>>(mInputFile, mOutputFile),
          i, numthreads, mBlockSize);                   
futures.push_back(std::move(f));

[=]{WorkerThread<Hash>(mInputFile, mOutputFile).run(i, numthreads, mBlockSize); }也可以考虑使用Lambda(沿的行),但这会导致行为发生变化:WorkerThread<Hash>不再在调用的线程中构造async,而是在async生成的线程中构造

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

CMAKE不会在Visual Studio中创建INSTALL项目

来自分类Dev

解决方案探索中的区域选项不会在Visual Studio 2019中显示

来自分类Dev

更新ParameterSyntaxList不会在Visual Studio中更新代码吗?

来自分类Dev

引用不会在 Visual Studio 2005 中自动添加

来自分类Dev

C ++相同的代码永远不会在Visual Studio中编译/运行,有时甚至不会在Qt Creator中运行

来自分类Dev

运算符重载会在Visual Studio 2013中编译,但不会在gcc中编译

来自分类Dev

SyncFusion SfChart 不会在 iOS 模拟器(白屏)中呈现,但会在 Visual Studio Preview 中显示?

来自分类Dev

Visual Studio 2015发布在首次发布时不会在bin文件夹中创建.compiled文件

来自分类Dev

Visual Studio 2015 C#Intellisense不会在按“”后自动选择上次使用的选项。(时期)

来自分类Dev

Visual Studio 2015 C#Intellisense不会在按“”后自动选择上次使用的选项。(时期)

来自分类Dev

尽管在调试选项中设置了复选框,Visual Studio Debugger不会在NullReferenceException上中断

来自分类Dev

使用C#,WPF,实体框架和Visual Studio 2012不会在数据库中更新数据

来自分类Dev

尽管在调试选项中设置了复选框,Visual Studio Debugger不会在NullReferenceException上中断

来自分类Dev

Proguard不会在Android Studio中混淆

来自分类Dev

Android Studio 不会在 PasswordToggleDrawable 中更改颜色

来自分类Dev

Visual Studio:不会在子窗口中绘制矩形

来自分类Dev

Heroku不会在Visual Studio Code中加载

来自分类Dev

Visual Studio 2015中的“无法引用默认构造函数”

来自分类Dev

异步断言不会在Scalatest中触发

来自分类Dev

Visual Studio 2013(更新3)中的默认Move构造函数

来自分类Dev

在python中等待之前,不会在异步函数中调用print函数

来自分类Dev

参考或需要其他文件时,Visual Studio 2019中的Node JS应用的Mocha不会在测试资源管理器中显示测试

来自分类Dev

颤振异步调用不会在initState()中异步运行

来自分类Dev

默认移动构造函数Visual Studio 2015

来自分类Dev

Android Studio 0.5.7不会在操作栏中显示按钮

来自分类Dev

不会在Android Studio的RecyclerView.ViewHolder中notifyDataSetChanged()启动init {}吗?

来自分类Dev

Android Studio 0.5.7不会在操作栏中显示按钮

来自分类Dev

数据不会在Jaspersoft Studio 6.2.2数据集对话框中显示

来自分类Dev

使用Intel SDK for Visual Studio调试OpenCL不会在断点处停止

Related 相关文章

  1. 1

    CMAKE不会在Visual Studio中创建INSTALL项目

  2. 2

    解决方案探索中的区域选项不会在Visual Studio 2019中显示

  3. 3

    更新ParameterSyntaxList不会在Visual Studio中更新代码吗?

  4. 4

    引用不会在 Visual Studio 2005 中自动添加

  5. 5

    C ++相同的代码永远不会在Visual Studio中编译/运行,有时甚至不会在Qt Creator中运行

  6. 6

    运算符重载会在Visual Studio 2013中编译,但不会在gcc中编译

  7. 7

    SyncFusion SfChart 不会在 iOS 模拟器(白屏)中呈现,但会在 Visual Studio Preview 中显示?

  8. 8

    Visual Studio 2015发布在首次发布时不会在bin文件夹中创建.compiled文件

  9. 9

    Visual Studio 2015 C#Intellisense不会在按“”后自动选择上次使用的选项。(时期)

  10. 10

    Visual Studio 2015 C#Intellisense不会在按“”后自动选择上次使用的选项。(时期)

  11. 11

    尽管在调试选项中设置了复选框,Visual Studio Debugger不会在NullReferenceException上中断

  12. 12

    使用C#,WPF,实体框架和Visual Studio 2012不会在数据库中更新数据

  13. 13

    尽管在调试选项中设置了复选框,Visual Studio Debugger不会在NullReferenceException上中断

  14. 14

    Proguard不会在Android Studio中混淆

  15. 15

    Android Studio 不会在 PasswordToggleDrawable 中更改颜色

  16. 16

    Visual Studio:不会在子窗口中绘制矩形

  17. 17

    Heroku不会在Visual Studio Code中加载

  18. 18

    Visual Studio 2015中的“无法引用默认构造函数”

  19. 19

    异步断言不会在Scalatest中触发

  20. 20

    Visual Studio 2013(更新3)中的默认Move构造函数

  21. 21

    在python中等待之前,不会在异步函数中调用print函数

  22. 22

    参考或需要其他文件时,Visual Studio 2019中的Node JS应用的Mocha不会在测试资源管理器中显示测试

  23. 23

    颤振异步调用不会在initState()中异步运行

  24. 24

    默认移动构造函数Visual Studio 2015

  25. 25

    Android Studio 0.5.7不会在操作栏中显示按钮

  26. 26

    不会在Android Studio的RecyclerView.ViewHolder中notifyDataSetChanged()启动init {}吗?

  27. 27

    Android Studio 0.5.7不会在操作栏中显示按钮

  28. 28

    数据不会在Jaspersoft Studio 6.2.2数据集对话框中显示

  29. 29

    使用Intel SDK for Visual Studio调试OpenCL不会在断点处停止

热门标签

归档