Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写JavaScript模板类?_Javascript_Class_Templates - Fatal编程技术网

如何编写JavaScript模板类?

如何编写JavaScript模板类?,javascript,class,templates,Javascript,Class,Templates,我只是JavaScript的新手。我想编写一个像C++一样的JS模板类。例如: template <typename T> class A { public: A(T x) { this.a=x; } ~A() { } void print() { std::cout<<a<<std::endl; } private: T a; }; 模板 甲级

我只是JavaScript的新手。我想编写一个像C++一样的JS模板类。例如:

template <typename T>
class A
{
public:
    A(T x)
    {
        this.a=x;
    }
    ~A()
    {

    }
    void print()
    {
        std::cout<<a<<std::endl;
    }
private:
    T a;
};
模板
甲级
{
公众:
A(T x)
{
a=x;
}
~A()
{
}
作废打印()
{
std::cout您可以这样做:

var A = function ( x ) {
    var a = x;
    this.print = function () {
        console.log(a);
    };
};

var test = new A(2);
test.print(); // -> 2

在这种情况下,变量
a
是私有的,函数
print
是公共的(与此
的任何其他属性一样),
a
是模板的构造函数(原型对象).

Javascript不需要模板来处理泛型类型,因为Javascript是一个。这意味着在Javascript中,函数可以接受任何类型的参数

为了实现与问题中的示例模板相同的功能,您可以使用以下使用对象文字的Javascript代码(更短):

var A = {
  print: function(value) {
    document.write(value);
  }
}
可以这样使用:

A.print(2);
您可以在上看到此代码sampe的作用

<>如果你希望代码与C++更接近地对应,你可以使用这个函数来代替:

var A = function(value) {
  return {
    print: function() {
      document.write(value);
    }
  }
}
可以这样使用:

A<int> test(2);
test.print();
var test = A(2);
test.print();

您可以在上看到这一点。

在您的例子中,由于模板参数是一种类型,因此不需要在Javascript中反映它

但是如果你有函数指针之类的东西

typedef bool (*C) (const int&, const int&);

template<C c>
class my_class{

public:
    void my_method(){
        // use c 
        // ...
    }

};
并按如下方式使用它

var my_class = my_class_t(function(a, b){return a < b;});
var my_instance = new my_class();
my_instance.my_method();
var my_class=my_class_t(函数(a,b){返回a为什么你要用动态类型的语言来创建模板类?我只是把C++代码翻译成JS代码,然后来解决这个问题。有没有办法翻译?也许它可以用,但是用这个方法不能反映“模板”。如果没有其他方法,也许是个好方法。谢谢。我知道了。谢谢你和MVCHR:
var my_class = my_class_t(function(a, b){return a < b;});
var my_instance = new my_class();
my_instance.my_method();