0

基本的には、デフォルト引数で関数ポインタを呼び出せるようにしたい。以下を見てください。

#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;
}

引数を明示的に指定せずに、関数ポインター (またはテンプレート引数) からデフォルト引数を使用して関数を呼び出すことができる方法 (トリックまたはその他) はありますか?

4

2 に答える 2

2

はい、良い方法があります。関数オブジェクト。このリンクを見ることを強くお勧めします。

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

于 2013-11-14T16:39:29.810 に答える
1

std::bind。bind 式に渡した引数で関数を呼び出す関数オブジェクトを返します。

auto f = std::bind(&function, 23);
func(f);
于 2013-11-14T16:37:53.310 に答える