我来自类似 Javascript 的语言,我可以在其中创建这样的函数。
function tween(obj, tweenParams, time, tweenOptions);
其用法如下:
tween(mySprite, {x: 10, y: 10}, 1, {startDelay: 1, loops: 5});
如果不清楚的话,这个函数会在 1 秒内将 mySprite 的 x 和 y 属性调整为 10,并以 1 秒的延迟循环 5 次。 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 示例完全匹配,我只是想知道它可以合理地简洁到什么程度。
最佳答案
当前版本的 C++ 不允许使用此语法。然而,根据此建议之一post被 C++20 采用,将通过使用指定的初始值设定项使其成为可能(如果,当然它会在那里实现)。
该提案已发布 here ,在 C++ 类中使用聚合初始化时借用 C99 提名成员语法。与统一初始化的 C++11 功能结合在一起,它将允许与您所要求的语法非常相似的语法。
例如,
struct args {
int x;
int y;
};
void foo(args a);
...
foo({.x = 10, .y = 25});
关于c++ - C++ 中的对象字面量替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45224382/