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

时间:2015-07-14 09:23:27

标签: c++ templates c++11

在这个缩短的示例(非真实世界代码)中,我尝试使用Callback调用int &,但是,当通过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;
}

1 个答案:

答案 0 :(得分:6)

你没有正确转发你的论点。为了使用完美转发$keys = array(); // array date => index in result $i = 0; foreach($input as $item) if (isset($keys[$item['date']])) // if exist $result[$keys[$item['date']]]['nb'] += $item['nb']; // add value else { $keys[$item['date']] = $i; // create new items in arrays $result[$i++] = $item; } print_r($result); 应该对转发引用进行操作,这是在推导的上下文中有rvalue引用时。您的std::forward函数应如下所示:

CallMethod

Demo