C++ 如何获取指向已推导模板函数的指针?

C++ 如何获取指向已推导模板函数的指针?,c++,c++11,templates,variadic-templates,template-meta-programming,C++,C++11,Templates,Variadic Templates,Template Meta Programming,我有一个模板函数,我想在自动推导模板参数的情况下使用它。 它工作得很好,但现在我需要它的ptr用于std::bind。 是这样的: class A{}; class B{}; class C{}; template<template<typename...> class TContainer, typename TR, typename... TEles> void func(TContainer<TEles...> container, function

我有一个模板函数,我想在自动推导模板参数的情况下使用它。

它工作得很好,但现在我需要它的
ptr
用于
std::bind


是这样的:

class A{};
class B{};
class C{};

template<template<typename...> class TContainer, typename TR, typename... TEles>
void func(TContainer<TEles...> container, function<TR(HeadOf<TEles...>::type)> f)
{
    TContainer<TR> rst;
    for(auto it : container)
    {
        fill(rst, f(it));
    }
    return rst;
}

vector<A>      vec_A;  // type : vector<A, allocator<A>>
MyContainer<B> cont_B; // type : MyContainer<B, allovator<B>, Maybe_Sth_Else>  

// auto ptrFoo = func_ptr_of( func(vec_A, transA2B) );
// auto ptrBar = func_ptr_of( func(cont_B, transB2C) );

// auto contB2contC = std::bind(ptrBar, placeholder::_1, transB2C);
// contB2contC(cont_B);
A类{};
B类{};
C类{};
模板
void func(t容器,函数f)
{
t容器rst;
用于(自动it:容器)
{
填充(rst,f(it));
}
返回rst;
}
向量向量A;//类型:矢量
MyContainer cont_B;//类型:MyContainer
//auto ptrFoo=func_ptr_of(func(vec_A,transA2B));
//auto ptrBar=func_ptr_of(func(cont_B,transB2C));
//auto-contB2contC=std::bind(ptrBar,占位符::_1,transB2C);
//contB2contC(cont_B);

我认为这是不可能的

但是如果你有一个C++14编译器,你可以用变量lambda做类似的事情

以身作则

A  a{};

auto fakeBondFunc = [&](auto ... as) { func(a, as...); };

fakeBondFunc(B{});
如果您想要修复第一个
a
参数,并强制第二个参数是
B
参数,您也可以在C++11中完成(不需要可变lambda)

使用ptr_t=void(*)(A,B);
ptr_t ptrFoo=func;
std::function boundFunc=std::bind(ptrFoo,A{},std::placeholder::_1);
boundFunc(B{});

我很确定这是不可能的,你能做的就是
&func
@DanielH好的。太遗憾了。
auto ptrFoo=&func
?@Jarod42在我的情况下,可能会有点复杂,因为我不能使用您显示的方式。嗯。。。事实上,我的模板参数非常混乱,所以我试图找到一种方法来自动推断它们。但这似乎是不可能的。
A  a{};

auto fakeBondFunc = [&](B const & b) { func(a, b); };

fakeBondFunc(B{});
    using ptr_t = void(*)(A, B);
    ptr_t ptrFoo = func<A, B>;
    std::function<void(B)> boundFunc = std::bind(ptrFoo, A{}, std::placeholders::_1);
    boundFunc(B{});