x
在上面的代码中,我们有一个对象Point
,其中包含x
和一个函数。
当我创建addToX
时,我需要初始化<Link to={`/single/${post.id}`}>
和指向函数的指针。
这非常糟糕,因为我不想每次都初始化函数指针!
有没有办法定义它,所以每次创建一个新的Point时它会自动指向for(const auto &storage : QStorageInfo::mountedVolumes()) {
listWidget->addItem(storage.name());
}
?
答案 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;
您甚至可以使用其他版本的常见用例。