gpt4 book ai didi

c++ - 为什么 std::apply 会因泛型函数而失败?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:39 26 4
gpt4 key购买 nike

取自cppreference ,为什么调用 std::apply(add_generic, ...) 编译失败?有办法解决吗?

#include <iostream>
#include <tuple>

int add(int first, int second)
{
return first + second;
}

template<typename T>
T add_generic(T first, T second)
{
return first + second;
}

int main()
{
std::cout << std::apply(add, std::make_tuple(1,2)) << '\n';

// template argument deduction/substitution fails
std::cout << std::apply(add_generic, std::make_tuple(2.0f,3.0f)) << '\n';
}

fails有错误:

[x86-64 gcc 7 (snapshot)] error: no matching function for call to 'apply(, std::tuple)' [x86-64 gcc 7 (snapshot)] note: couldn't deduce template parameter '_Fn'

最佳答案

这在 C++17 中并不新鲜。仅来自 std::apply 的签名, 不知道你是否想通过 add_generic<int> , add_generic<float> , add_generic<std::string> ,或其他任何东西。知道这需要更多的上下文(具体来说:它需要知道 std::apply 将如何调用它),但该信息在调用站点不可用,因此不能用于模板参数推导。

可以通过传递一个 对象,并使该对象能够调用add_generic 的任何一个实例来解决这个问题。需要:

std::cout << std::apply(
[](auto first, auto second) { return add_generic(first, second); },
std::make_tuple(2.0f,3.0f)) << '\n';

关于c++ - 为什么 std::apply 会因泛型函数而失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43171323/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com