使用x64时,C ++异步返回值不同

时间:2014-12-26 03:14:09

标签: c++ visual-studio visual-studio-2013 64-bit stdasync

以下代码使用VC2013中的Debug \ Win32和Debug \ x64 设置编译,但是当我使用Debug \ x64 时,我得到以下 IntelliSense错误

    IntelliSense: no operator "=" matches these operands
    operand types are: std::future<bar<int>> = std::future<bar<int> (&)(bar<int> v)>    

Error指的是Header.cpp中的这个函数:

bar<int> test::call(bar<int> v)
{
    std::future<bar<int>> ret;
    ret = std::async(std::launch::async, &test::exec, this, v);

    return ret.get();
}

为什么std :: async在使用x64时会返回不同的内容?

返回值win32:

std::future<bar<int>>

返回值x64:

std::future<bar<int> (&)(bar<int>

我如何为x64修复此问题?


我的代码:

Header.h

#pragma once
#include <future>
#include <iostream>

using namespace std;

template <typename T>
class bar
{
public:
    bar()
    {
        state = 9;
    }

    void dec(){ state--; }

    T show()
    {
        return state;
    }

private:
    T state;
};



class test{
public:
    test(int a);

public:
    bar<int> call(bar<int> v);

private:
    bar<int> exec(bar<int> v);




private:
    int value;
};

Header.cpp

#include "Header.h"


using namespace std;


test::test(int a)
{
    value = a;
}

bar<int> test::call(bar<int> v)
{
    std::future<bar<int>> ret;
    ret = std::async(std::launch::async, &test::exec, this, v);

    return ret.get();
}

bar<int> test::exec(bar<int> v)
{
    v.dec();
    v.dec();
    return v;
}

Source.cpp

#include <future>
#include <iostream>

#include "Header.h"

using namespace std;   

int main()
{
    test object(4);
    bar<int> foo;
    bar<int> other = object.call(foo);
    std::cout << other.show();
    getchar();
}

修改 我不想使用auto,因为auto在其他情况下不起作用(例如创建一个期货矢量然后推回期货)

此错误 编译器错误,代码编译并执行flawlesly ==&gt;我无法发布编译器错误,因为没有编译器错误。我只是想摆脱VC智能感知错误

使用std :: move()无法解决问题,我仍然会收到IntelliSense错误: (该代码使用和不使用std :: move完美地编译和执行)

IntelliSense: no operator "=" matches these operands
            operand types are: std::future<bar<int>> = std::future<bar<int> (&)(bar<int> v)>

0 个答案:

没有答案