C++11: Universal executor

淺唱寂寞╮ 提交于 2020-01-02 04:11:08

问题


I would to know how get this code compiles:

// test3.cpp                                                                                                                                                                                      

#include <iostream>

using namespace std;

template<typename R, typename... rArgs>
R universal_exer(R(*f)(rArgs...), rArgs... args)
{
    return (*f)(forward<rArgs>(args)...);
}

int addition(int a)
{
    return a;
}

int addition(int a, int b)
{
    return a + b;
}

template<typename... Args>
int addition(int a, int b, Args... args)
{
    return a + b + addition(args...);
}

int main()
{
    cout << universal_exer(&addition, 1) << endl;
}

Error message (gcc 4.7.2):

test3.cpp: In function 'int main()':
test3.cpp:31:40: error: no matching function for call to 'universal_exer(<unresolved overloaded function type>, int)'
test3.cpp:31:40: note: candidate is:
test3.cpp:8:3: note: template<class R, class ... rArgs> R universal_exer(R (*)(rArgs ...), rArgs ...)
test3.cpp:8:3: note:   template argument deduction/substitution failed:
test3.cpp:31:40: note:   couldn't deduce template parameter 'R'

How can I indicate the correct overload of the addition function?


回答1:


Replace your main with

int main()
{
    int (*f)(int) = &addition;
    cout << universal_exer(f, 1) << endl;

    // or alternatively
    // cout << universal_exer((int (*)(int))addition, 1) << endl;
}


来源:https://stackoverflow.com/questions/15506427/c11-universal-executor

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!