c++ - 我如何获得指向已推导的模板函数的指针?

标签 c++ c++11 templates variadic-templates template-meta-programming

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

它运行良好,但现在我需要在 std::bind 中使用它的 ptr

它是这样的:

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

最佳答案

我认为这是不可能的。

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

举例

A  a{};

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

fakeBondFunc(B{});

如果你想修复第一个 A 参数并强制第二个是 B 参数,你也可以在 C++11 中完成(不需要可变参数λ)

A  a{};

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

fakeBondFunc(B{});

关于c++ - 我如何获得指向已推导的模板函数的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50403716/

相关文章:

c++ - Web 浏览器控件仿真问题 (FEATURE_BROWSER_EMULATION)

c++ - 模板模式匹配

C++ SFINAE 运算符/函数结果类型检查

c++ - 一个类的双重部分模板特化

c++ - 模板函数中的类型错误

Java JNIEnv 段错误

c++ - 模板实现错误(嵌套类)

c++ - 在 C++ 中,为什么在嵌套的 unordered_map 上调用函数需要 move 构造函数?

C++11 operator""with double parameter

c++ - 我如何使用 GNU C++ 引用继承类的字段?