gpt4 book ai didi

c++ - 获取函数的第一个输入类型

转载 作者:行者123 更新时间:2023-11-30 05:10:11 26 4
gpt4 key购买 nike

我想推导出作为模板参数发送的函数的第一个输入参数。如果可以从下面代码中的函数 f 推导出参数 inputtype,那么这样做将允许我消除它。

template<typename inputtype, class  Fn, typename ...Params>
inline auto ListMap(const List* const polymorphic_list,
Fn f,
Params&&... params) {

std::vector<decltype(f(nullptr, std::forward<Params>(params)...))> res;
for (auto lcell = list_head(polymorphic_list); lcell; lcell = lcell->next) {
const auto v = lcell->data.ptr_value;
const inputtype* in = static_cast<const inputtype*>(v);
res.emplace_back(std::move(f(in, std::forward<Params>(params)...)));
}
return res;
}

最佳答案

我创建了以下示例,其中成功推导了 inputtype 模板参数。希望您能够将这个想法整合到您的代码中。

#include <vector>

struct List{
};

struct Data{
void* ptr_value;
};
struct Node{
Node* next;
Data data;
};
Node* list_head(const List*const)
{
return nullptr;
}

template<typename T, typename inputtype, typename ...Params>
using Fn = T (*) (inputtype*, Params...);

template<typename T, typename inputtype, typename ...Params, typename = Fn<T,inputtype, Params...>>
inline auto ListMap(List* polymorphic_list, Fn<T,inputtype, Params...> f,Params&&... params) {

std::vector<T> res;
for (auto lcell = list_head(polymorphic_list); lcell; lcell = lcell->next) {
const auto v = lcell->data.ptr_value;
inputtype* in = static_cast<inputtype*>(v);
res.emplace_back(std::move(f(in, std::forward<Params>(params)...)));
}
return res;
}

int f(void*,int& x)
{
return x;
}
int main()
{
int x = 1;
auto res = ListMap(new List(),f,x);
}

关于c++ - 获取函数的第一个输入类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45812887/

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