将模板参数作为目标类型传递

Passing template arguments as target type

本文关键字:目标 类型 参数      更新时间:2023-10-16

在这个简短的例子中(不是现实世界的代码),我试图用int &调用Callback,但是,当通过CallMethod方法时,模板参数被解释为int,这意味着它不能将其转换为目标参数类型。

这可能吗?我知道我可以在调用CallMethod时将参数强制转换为正确的类型,但是如果可能的话,我希望解决方案是隐式的。

#include <functional>
#include <iostream>
using namespace std;
void Callback(int &value)
{
    value = 42;
}
template <typename Method, typename ...Params>
void CallMethod(Method method, Params ...params)
{
    method(std::forward<Params>(params)...);
}
int main()
{
    int value = 0;
    CallMethod(&Callback, value);
    cout << "Value: " << value << endl;
    return 0;
}

您没有正确转发您的参数。为了使用完美转发,std::forward应该对转发引用进行操作,这是当您在推导的上下文中有右值引用时。您的CallMethod函数应该如下所示:

template <typename Method, typename ...Params>
void CallMethod(Method method, Params&& ...params)
{
    method(std::forward<Params>(params)...);
}
演示

相关文章: