gpt4 book ai didi

c++ - 具有 invoke_result 的重载命名非成员函数的返回类型

转载 作者:行者123 更新时间:2023-11-30 03:17:03 28 4
gpt4 key购买 nike

给定大量采用不同类型参数的重载函数,有没有办法在编译时在模板化上下文中获取特定重载的返回类型或其中一种参数类型?例如,考虑这种情况,其中重载函数将参数引用作为输出值:

struct struct_a { };
struct struct_b { };
struct struct_c { };

float process(struct_a) { return 5.0f; }
bool process(struct_b) { return true; }
int process(struct_c) { return -1; }

void process_in_place(struct_a, float& out) { out = 5.0f; }
void process_in_place(struct_b, bool& out) { out = true; }
void process_in_place(struct_c, int& out) { out = -1; }

template<typename T>
void do_process(T val)
{
auto result1 = process(val);
std::cout << result1 << std::endl;

// ???
//using post_process_type = std::invoke_result_t<decltype(process)&(std::declval<T>)>;
// ???
post_process_type result2;
process_in_place(val, result2);
}

int main()
{
do_process(struct_a());
do_process(struct_b());
do_process(struct_c());
}

在调用最终选择的 process_in_place 版本之前,我如何知道输出参数应该是什么类型?

最佳答案

using post_process_type = decltype(process(std::declval<T>()));

这样就可以了。 decltype 将在重载解析选择正确的 process 后查看返回类型。

关于c++ - 具有 invoke_result 的重载命名非成员函数的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55769849/

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