Scala中C ++的std :: forward等效项

时间:2019-11-28 05:30:34

标签: c++ scala templates

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(/* ??? */)
  }
}

0 个答案:

没有答案