繁体   English   中英

将指向成员函数参数的指针传递给模板参数

[英]Passing pointer to member function parameter into template argument

我如何将成员函数指针转发到模板类型参数中。 我有以下代码。

template <typename T, typename ret, typename ...params>
class lol2
{
    template <ret(T::*memfn)(params...)>
    void boo() 
    {
        /* some code here */ 
    }
};

template<typename T, typename ret, typename ... params>
void foo(ret(T::*memfn)(params...))
{
    auto test = lol2<T, ret, params...>{};
    test.boo<memfn>(); /*error: expected primary-expression before ‘)’ token */
}

我需要能够将成员函数指针转发到模板参数中。 我该如何实现?

谢谢。

在上下文中, boo是一个从属名称。 您需要使用

test.template boo<memfn>();

当然,这无论在memfn是运行时值时都不起作用:仅当它是恒定的memfn可以工作。 如果您需要处理运行时值,则需要以某种方式传递参数。 它可能成为lol2的成员或boo()的附加参数。

您还需要修正lol2的定义,并在lol2使用T DerivedType

请记住,成员函数为了可调用必须与对象绑定。 因此,您将在调用时以某种方式传递类的对象。 此外,您必须转发成员函数指针:

template <typename T, typename ret, typename ...params>
class lol2 {
  T &obj;
public:
  lol2(T &obj_) : obj(obj_) {}
  void boo(ret(T::*memfn)(params...), params&&... pars) { 
    (obj.*memfn)(std::forward<params>(pars)...);
  }
};

template<typename T, typename ret, typename ... params>
void foo(T &obj, ret(T::*memfn)(params...), params&&... pars) {
  auto test = lol2<T, ret, params...>(obj);
  test.boo(memfn, std::forward<params>(pars)...);  
}

现场演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM