/*
* 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\n", 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