関数ポインタのあれこれ

関数ポインタ関係の自分用まとめ.

関数ポインタ

戻り値の型 (*関数ポインタを管理する名前)(仮引数) = 関数

double test_add(double x, double y){
    return x + y;
}

double (*func_test_add)(double, double) = test_add;

std::cout << func_test_add(1.0, 2.0) << std::endl;

typedef を利用

typedef 戻り値の型 (*関数ポインタを管理する名前)(仮引数)

typedef double (*func_test_add)(double, double);
func_test_add = test_add;

std::cout << func_test_add(1.0, 2.0) << std::endl;

using を利用

using 関数ポインタを管理する名前 = 戻り値 (*)(仮引数)

using func_test_add = double (*)(double, double);
func_test_add = test_add;

std::cout << func_test_add(1.0, 2.0) << std::endl;

auto を利用

auto 関数ポインタを管理する名前 = 関数

auto func_test_add = test_add;
std::cout << func_test_add(1.0, 2.0) << std::endl;

std::function を利用

function<戻り値(仮引数)> 関数ポインタを管理する名前 = 関数など (ラムダ式とかもOK)

function<double(double, double)> func_test_add = test_add;
std::cout << func_test_add(1.0, 2.0) << std::endl;

<おまけ> 入力バッファのクリア方法

cin.clear();
cin.ignore(numeric_limits<streamsize>::max()); //バッファを最後までクリア

//Cだとこの辺 (?)
fflush(stdin);