【问题标题】:Having to know the structure offset in which a function pointer is declared必须知道声明函数指针的结构偏移量
【发布时间】:2015-07-15 00:43:01
【问题描述】:

有什么方法可以调用这样的函数(在某个地方初始化):

mystruct.foo();

允许foo() 从内部访问mystruct 结构。


我的目标是在 C 语言中使用一些面向对象的编程 并允许foo 访问成员,这是mystruct 结构的一部分。

【问题讨论】:

  • 你的问题很不清楚!请提出一个具体的问题,你可以。但请显示结构定义。如果您正在寻找的是有权访问 foo 内部的结构,那么请说清楚。
  • 有一个entire book 介绍 C 中的面向对象编程。这不是关于巧妙的语法技巧,而是某种心理结构。
  • offsetof in <stddef.h>
  • @iharob 是的。我如何使它更清楚?你显然明白了。
  • 我猜是因为这有道理,但绝不是清楚,但现在更好了。

标签: c function memory-management struct function-pointers


【解决方案1】:

没有办法让它神奇地发生,我唯一能想到的就是这样做

#include <stdio.h>

#define DECLARE_CLASS_METHOD(class, name, ...) \
    (*name)(class *this, __VA_ARGS__)

typedef struct Class Class;
struct Class
{
    int DECLARE_CLASS_METHOD(Class, method, int value);
};

int
method(Class *this, int value)
{
    fprintf(stderr, "%p: %d\n", (void *) this, value);
    return 0;
}

int
main(void)
{
    Class instance;

    instance.method = method;
    instance.method(&instance, 9);

    return 0;
}

但正如您所见,您必须将实例传递给方法,它不会像 c++ 这样的 OO 语言那样自动发生。

【讨论】:

  • 啊,那我最好不要全部使用。
  • @Malina 嗯,是的!要么使用适当的编程语言,要么使用应使用的语言。不要试图强迫该语言表现得像另一种语言。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多