微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

结构化绑定参数推导失败

如何解决结构化绑定参数推导失败

我正在尝试扩展 this answer 以返回除 cpu 时间之外的函数结果。这是我的代码

#include <chrono>
#include <iostream>
#include <utility>

template <typename F,typename... Args>
auto MeasureFunctioncpuTime(F func,Args&&... args) {
  using TimeVar = std::chrono::high_resolution_clock::time_point;
  constexpr auto get_Now = std::chrono::high_resolution_clock::Now;
  TimeVar t1 = get_Now();
  const auto result = func(std::forward<Args>(args)...);
  const double cpu_time =
      std::chrono::duration_cast<std::chrono::nanoseconds>(get_Now() - t1)
          .count();
  return {result,cpu_time};
}

double AddTwoNumbers(const double a,const double b) { return a + b; }

int main() {
  auto [result,cpu_time] = MeasureFunctioncpuTime(AddTwoNumbers,1.0,3.0);
  std::cout << result << "\n";
  std::cout << cpu_time << "\n";
}

然后我使用以下命令行编译它:

g++ main.cpp -o main -std=c++17 -lstdc++ -o2

但我收到以下错误

main.cpp: In instantiation of ‘auto MeasureFunctioncpuTime(F,Args&& ...) [with F = double (*)(double,double); Args = {double,double}]’:
main.cpp:20:75:   required from here
main.cpp:14:27: error: returning initializer list
   return {result,cpu_time};
                           ^
main.cpp: In function ‘int main()’:
main.cpp:20:8: error: ‘void <structured bindings>’ has incomplete type
   auto [result,3.0);
        ^~~~~~~~~~~~~~~~~~

为什么这个初始化列表失败了?

更新: 按照 Bob提示,我设法通过将函数的返回值更改为此行来返回一对:

  return std::pair<decltype(result),double>{result,cpu_time};

这种方法有什么缺点吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。