C ++(11)函数的默认参数作为模板参数或函数指针

时间:2013-11-14 16:34:37

标签: c++ function templates pointers default

基本上,我希望能够使用默认参数调用函数指针。看看以下内容:

#include <iostream>
using namespace std;

int function(int arg1 = 23)
    {
        printf("function called, arg1: %d\n", arg1);
        return arg1 * 3;
    }

template<typename Fn> int func(Fn f)
{
    int v = 3;
    f(); //error here 'error: too few arguments to function'
    f(23); //this compiles just fine
    return v;
}


int main() {
    func(&function);
    printf("test\n");
    return 0;
}

是否有任何方法(技巧或其他方式)能够使用函数指针(或模板参数)中的默认参数调用函数而不明确指定参数?

2 个答案:

答案 0 :(得分:2)

是的,有一个好方法。功能对象。我强烈建议你看看这个链接。

http://www.stanford.edu/class/cs106l/course-reader/Ch13_Functors.pdf

答案 1 :(得分:1)

std::bind。它返回一个函数对象,该函数对象使用您传递给绑定表达式的参数调用该函数:

auto f = std::bind(&function, 23);
func(f);