我有这个结构:
typedef struct s_hashmap
{
t_hashmap_elem **array_elements;
size_t array_size;
void *(*get)(struct s_hashmap **, void *);
void (*add)(struct s_hashmap **, t_hashmap_elem *);
} t_hashmap;
我可以在获取函数指针时访问array_elements而不传递我的变量作为参数,如下所示:
h-> get(& h,& key); // h是t_hashmap变量。
如果无法做到这一点,请向我解释另一种方法。
提前谢谢。答案 0 :(得分:2)
不,你不能。 C中没有用户定义类型的方法。如果要更改它,必须将指针(或指向指针的指针,具体取决于参数声明)传递给结构的对象。
答案 1 :(得分:2)
不。 C 函数不是方法:函数没有机制来发现调用它的对象。如果您需要此功能,则应考虑使用C以外的语言。
你几乎在你的问题中钉了“做其他的方法”。但请注意,在C中,很少有结构拥有函数指针的原因,所以你也可以通过它的正确名称来调用函数:
@Service
public class ShutdownListener {
private static final Logger LOGGER = Logger.getLogger(ShutdownListener.class);
@EventListener(ContextClosedEvent.class)
public void onContextClosed(ContextClosedEvent event) {
LOGGER.info("OAE: event :" + event);
ApplicationContext ctx = event.getApplicationContext();
LOGGER.info("OAE: context :" + ctx);
try {
LOGGER.info("sleeping");
TimeUnit.SECONDS.sleep(60);
LOGGER.info("slept");
} catch (InterruptedException e) {
LOGGER.error(e);
e.printStackTrace();
}
}
用于C语言中的函数指针,但它们对于模拟对象方法并不是很好,因为像Java这样的语言为你做的所有魔术(弄清楚应该调用哪个方法)在给定对象上,并传入对象的引用)必须在C中明确地完成。