1

我来自类似 Javascript 的语言,我可以在其中制作这样的功能。

function tween(obj, tweenParams, time, tweenOptions);

这像这样使用:

tween(mySprite, {x: 10, y: 10}, 1, {startDelay: 1, loops: 5});

如果不清楚,这会使 mySprite 的 x 和 y 属性在 1 秒内变为 10,循环 5 次,延迟为 1 秒。tweenParams 可以包含 obj 可能具有的任何值,并且 tweenOptions 是一个固定结构。

我想知道这在 C++ 中有多简洁合理,结构和数组初始化似乎不够灵活,无法表达这一点。我最好的猜测涉及一次调用多个补间函数一个属性,例如。

TweenOptions opts = {};
opts.startDelay = 1;
opts.loops = 5;
tween(&mySprite.x, 10, 1, opts);
tween(&mySprite.y, 10, 1, opts);

我不太了解 C++ 高级功能,也许运算符重载或自定义初始化可以帮助我?

编辑:要清楚,我不希望它与 Javascript 示例完全匹配,我只想知道这可以合理地简洁。

4

1 回答 1

2

当前版本的 C++ 不允许这种语法。但是,根据这篇文章,C++20 采用的其中一项建议将通过使用指定的初始化程序来实现(当然,如果它会在那里实现)。

在 C++ 类中使用聚合初始化时,可在此处获得的提案借用了提名成员的 C99 语法。再加上统一初始化的 C++11 特性,它将允许与您所要求的语法非常相似的语法。

例如,

struct args {
    int x;
    int y;
};

void foo(args a);
...
foo({.x = 10, .y = 25});
于 2017-07-20T21:04:43.503 回答