相关疑难解决方法(0)

转发模板成员函数的参数

一个例子


我需要将一些预定义的参数和一些用户传递的参数转发给成员函数.

#define FWD(xs) ::std::forward<decltype(xs)>(xs)

template<class T, class... Ts, class... TArgs>
void forwarder(void(T::*fptr)(Ts...), TArgs&&... xs)
{
    T instance;
    (instance.*fptr)(FWD(xs)..., 0);
    //                           ^
    // example predefined argument
}

forwarder(&example::f0, 10, 'a');   
forwarder(&example::f1, 10, "hello", 5);
Run Code Online (Sandbox Code Playgroud)

这适用于非模板成员函数.

forwarder但是,传递给can 的成员函数指针也指向模板函数.不幸的是,T在这种情况下,编译器无法推断出类型:

struct example
{
    void f0(int, int) { }

    template<class T>
    void f1(T&&, int) { }
};

// Compiles
forwarder(&example::f0, 10);

// Does not compile
forwarder(&example::f1, 10);
Run Code Online (Sandbox Code Playgroud)

错误:

prog.cpp:30:28: error: no matching function for call to 'forwarder(<unresolved overloaded function type>, int)' …
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-templates type-deduction c++14

12
推荐指数
1
解决办法
502
查看次数