C - 我可以在结构中定义默认函数指针吗?

时间:2018-01-14 22:13:15

标签: c pointers struct

x

在上面的代码中,我们有一个对象Point,其中包含x和一个函数。

当我创建addToX时,我需要初始化<Link to={`/single/${post.id}`}> 和指向函数的指针。

这非常糟糕,因为我不想每次都初始化函数指针!

有没有办法定义它,所以每次创建一个新的Point时它会自动指向for(const auto &storage : QStorageInfo::mountedVolumes()) { listWidget->addItem(storage.name()); }

3 个答案:

答案 0 :(得分:2)

如果您想要一些默认值,则需要创建构造函数。像这样:

SELECTs

然后就这样使用它:

struct Point createPoint(int x) {
    struct Point r = { x, addToX };
    return r;
}

或者,您可以将默认值创建为宏:

struct Point p1 = createPoint(3);

用过:

#define POINT_INITIALIZER(x) { (x), addToX }

我会推荐功能,因为它们更安全,我认为宏没有任何优势。

答案 1 :(得分:1)

我很确定您的问题的答案称为 class C ++ 。你有什么特别的理由坚持普通的C?

编辑: 既然你说它是针对uni项目的:不,你不能“自动”初始化它。我能想到的最好的解决方案是定义类似的东西:

struct Point
{
    int x;
    void(*func)(struct Point*, int);
};

void addToX(struct Point*a, int b) {
    a->x +=b;
}

void point_init(struct Point* a) {
    a->func = &addToX;
}

void main() {
    struct Point p1;
    point_init(&p1);
    p1.x = 3;

    printf("%d\n", p1.x);

    p1.func(&p1, 2);
    printf("%d\n", p1.x);
}

答案 2 :(得分:1)

最简单的方法是使用可以复制的默认结构。

const struct​ foo default_foo = {
    .func = myfunc;
};

稍后您可以将新的struct foo初始化为默认值。

struct foo local_foo = default_foo;

您甚至可以使用其他版本的常见用例。