gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:23:47 25 4
gpt4 key购买 nike

在这个缩短的示例(不是真实世界的代码)中,我尝试使用 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)...);
}

Demo

关于c++ - 将模板参数作为目标类型传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31402678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com