开发者社区> 问答> 正文

具有不同返回类型的函数的变体

下面的代码没有编译:

#include <functional>
#include <variant>

int main() {
  using ret_void = std::function<void()>;
  using ret_int  = std::function<int()>;

  std::variant<ret_void, ret_int> var;
  var.emplace([](){ return 1; } );
}

编译说template argument deduction/substitution failed...有人能解释一下为什么这不能编译吗?

展开
收起
aqal5zs3gkqgc 2019-12-19 19:11:47 3060 0
1 条回答
写回答
取消 提交回答
  • 这无法编译,因为js std::variant::emplace 需
    要给出替代位置的备选变量的类型或索引:

    #include <functional>
    #include <variant>
    
    int main() {
      using ret_void = std::function<void()>;
      using ret_int  = std::function<int()>;
    
      std::variant<ret_void, ret_int> var;
      var.emplace<ret_int>([](){ return 1; });
    }
    
    

    的所有重载的第一个模板参数。

    std::variant::emplace
    

    [variant.mod]是替换位置的变量的索引或类型。这些重载都不会以使其成为可还原的…的方式使用该参数。

    2019-12-19 19:13:05
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
重新定义计算的边界 立即下载
建立联系方法之一 立即下载
低代码开发师(初级)实战教程 立即下载