首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取函数的第一个输入类型

获取函数的第一个输入类型
EN

Stack Overflow用户
提问于 2017-08-22 16:43:13
回答 1查看 67关注 0票数 1

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

代码语言:javascript
运行
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-22 17:37:15

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

代码语言:javascript
运行
复制
#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);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45812887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档