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{});