C関数、関数ポインタ、関数タイプ、関数配列、関数強制変換使用
2510 ワード
/*
* File: main.cpp
* Author: Vicky
*
*/
#include <iostream>
#include <cstdarg>
/** , */
typedef void (*FUNC_t)(int id, int args_size, ...);
void pcreate(int id, int args_size, ...) {
std::cout << "create" << std::endl;
}
void pread(int id, int args_size, ...) {
std::cout << "read" << std::endl;
}
void pupdate(int id, int args_size, ...) {
std::cout << "update" << std::endl;
}
void pdelete(int id, int args_size, ...) {
std::cout << "delete" << std::endl;
}
/** , */
FUNC_t funcs[] = {
&pcreate,
&pread,
&pupdate,
&pdelete,
};
void args(int args_size/** */, ... /** */) {
va_list argp;
va_start(argp, args_size);
for (int i = 0; i < args_size; i++) {
char* arg = va_arg(argp, char*);
std::cout << arg;
}
std::cout << std::endl;
va_end(argp);
}
/*
*
*/
int main(void) {
args(2, "Hello ", "World!");
void (*function_args)(int, ...) = &args;
function_args(3, "Fuck ", "FFFKKK ", " ");
std::cout << "---------------------------" << std::endl;
int funcs_size = sizeof (funcs) / 4;
for (int i = 0; i < funcs_size; i++) {
funcs[i](10001, 0); //
}
std::cout << "---------------------------" << std::endl;
printf("funcs[0] = %d\tpcreate = %d
", funcs[0], pcreate);
std::cout << " (int) " << std::endl;
int p_adr = int(funcs[0]);
std::cout << "p_adr = " << p_adr << std::endl;
FUNC_t f = FUNC_t(p_adr);
f(2001,0);
return 0;
}
Hello World!
Fuck FFFKKKニマ
---------------------------
create
read
update
delete
---------------------------
funcs[0] = 134514602 pcreate = 134514602
関数ポインタアドレス値(int)から関数に変換して呼び出す
p_adr = 134514602
create