Scala中与C ++的std::forward
是否等效?
例如,我想在Scala中创建一个类似于以下C ++代码的代码:
#include <iostream>
using namespace std;
class Entity {
public:
Entity(string author, int somethingElse): author(author), somethingElse(somethingElse) {
}
template <typename... Args>
static Entity apply(Args&&... args) {
return Entity(std::forward<Args>(args)...);
}
private:
string author;
int somethingElse;
};
int main() {
Entity e = Entity::apply("hello", 123);
return 0;
}
因此,此代码的主要功能是,当我更改Entity
类的构造函数时,不必为apply
方法维护相同的参数列表,因为它是由自动推断的。编译器。类型也将在编译时进行验证,并且构造函数中的类型可以不同。不会将它们强制转换为其他任何值(即,不会强制转换为void*
)。
在Scala中,我想创建如下代码:
import org.scalajs.dom
case class Entity(author: String, element: dom.Element) {
}
object Entity {
def apply(/* ??? */): Entity = {
new Entity(/* ??? */)
}
}