首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++11模板类返回类型

c++11模板类返回类型
EN

Stack Overflow用户
提问于 2021-05-30 19:38:48
回答 1查看 28关注 0票数 0

一个简单的类

代码语言:javascript
复制
   struct Test{
        void display(int x)
        {
           printf("%d\n", x);
        }
    };

c++11

代码语言:javascript
复制
template<class F, class... Args>
auto enqueue(F&& f, Args&&... args) -> std::future<decltype(f(args...))>{

    auto task = std::make_shared<std::packaged_task<decltype(f(args...)())>>(
        std::bind(std::forward<F>(f), std::forward<Args>(args)...)
    );
    return task->get_future();
}

称之为just use (cls是上面模板函数类的对象)

代码语言:javascript
复制
Test test;
cls->enqueue(&Test::display, &test, 0);

计算器错误

代码语言:javascript
复制
candidate template ignored: substitution failure 
[with F = void (TestMem::*)(int), Rest = <TestMem *, int>]: called object type 'void (TestMem::*)(int)' is not a function or function pointer
        auto enqueue(F && f, Rest&&... rest) ->std::future<decltype(f(rest...))> {

上面在非类成员函数上工作得很好,有人能给c++11一个修复吗?

c++14运行良好,但我的项目需要c++11

代码语言:javascript
复制
template<class F, class... Args>
auto enqueue(F&& f, Args&&... args) {

    using return_type = typename std::result_of<F(Args...)>::type;

    auto task = std::make_shared<std::packaged_task<return_type()>>(
        std::bind(std::forward<F>(f), std::forward<Args>(args)...)
    );
    return task->get_future();
}
EN

回答 1

Stack Overflow用户

发布于 2021-05-30 23:25:00

将返回类型定义为std::future::type>解决此问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67760714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档