[英]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.