Javascript到C++;:对象等价物? 我已经被要求把一些代码从JavaScript转换成C++。虽然我非常熟悉JavaScript,但我对C++没有经验。

Javascript到C++;:对象等价物? 我已经被要求把一些代码从JavaScript转换成C++。虽然我非常熟悉JavaScript,但我对C++没有经验。,javascript,c++,Javascript,C++,javascript代码大量使用对象。例如,以下代码用于将角度从度转换为任何其他指定单位: var allConversions = { "Angle": { "degrees": { "degrees":function(inputNum) { return inputNum*1}, "minutes":function(inputNum) { return inputNum*60}, "radians":function(inputNu

javascript代码大量使用对象。例如,以下代码用于将角度从度转换为任何其他指定单位:

var allConversions = {
"Angle": {
    "degrees": {
        "degrees":function(inputNum) { return inputNum*1},
        "minutes":function(inputNum) { return inputNum*60},
        "radians":function(inputNum) { return inputNum*0.0174532925},
        "revolutions":function(inputNum) { return inputNum*0.00277777778},
        "seconds":function(inputNum) { return inputNum*3600},
    }
}

exports.convertUnits= function(unitType, inUnit, outUnit, inputVal) {
    return allConversions[unitType][inUnit][outUnit] (inputVal);
}

我想知道在C++中如何创建类似的最佳实践是什么?我应该尝试用结构或类创建类似的东西吗?

不太清楚所有的否决票都是关于什么的。我看你的问题没有错

JavaScript是一种无类型语言,它有点。。。灵活的对象构造。根据实际代码的不同,您有两个选项,并且希望将两者混合使用

选项1:创建类

在本例中,您将为特定的数据结构创建一个类,其中包含所需的每个值的属性

当JavaScript对象在其所有使用过程中保持一致时,请使用此选项

选项2:使用哈希映射

#ifndef SOMECLASS_H
#define SOMECLASS_H

#include <string>

using std::string;

class degrees
{
    public:
        double inputVal;

        degrees(string, string, string, double); // a constructor

        double degreesFunc(double); // double?, can't have same name func
        double minutes(double);
        double radians(double);
        double revolutions(double);
        double seconds(double);
};

class Angle : public degrees
{
    public:
        Angle(string, string, string, double);
};

class allConversions : public Angle
{
    public:
        allConversions(string, string, string, double);
};

#endif /* SOMECLASS_H */
#include <iostream>
#include "someClass.hpp"

using std::cout;

int main()
{
    allConversions convertUnits("what?", "what?", "what?", 10);

    cout << convertUnits.inputVal << '\n';
    cout << convertUnits.radians(10) << '\n';
    cout << convertUnits.minutes(10) << '\n';
}
有各种不同的哈希映射类。您选择的版本取决于您使用的特定版本和框架


尽管如此,它们通常像JavaScript对象一样工作,您可以在其中创建键/值对。当您不太确定数据是什么时,请使用此选项。

在很大程度上取决于总体结构和上下文,而这在您的代码片段中是缺失的。也许,一个带有一些内联函数的简单类就可以了。但如果我必须尝试提供的等效代码,我必须编写如下内容:

someClass.hpp

#ifndef SOMECLASS_H
#define SOMECLASS_H

#include <string>

using std::string;

class degrees
{
    public:
        double inputVal;

        degrees(string, string, string, double); // a constructor

        double degreesFunc(double); // double?, can't have same name func
        double minutes(double);
        double radians(double);
        double revolutions(double);
        double seconds(double);
};

class Angle : public degrees
{
    public:
        Angle(string, string, string, double);
};

class allConversions : public Angle
{
    public:
        allConversions(string, string, string, double);
};

#endif /* SOMECLASS_H */
#include <iostream>
#include "someClass.hpp"

using std::cout;

int main()
{
    allConversions convertUnits("what?", "what?", "what?", 10);

    cout << convertUnits.inputVal << '\n';
    cout << convertUnits.radians(10) << '\n';
    cout << convertUnits.minutes(10) << '\n';
}
测试.cpp

#ifndef SOMECLASS_H
#define SOMECLASS_H

#include <string>

using std::string;

class degrees
{
    public:
        double inputVal;

        degrees(string, string, string, double); // a constructor

        double degreesFunc(double); // double?, can't have same name func
        double minutes(double);
        double radians(double);
        double revolutions(double);
        double seconds(double);
};

class Angle : public degrees
{
    public:
        Angle(string, string, string, double);
};

class allConversions : public Angle
{
    public:
        allConversions(string, string, string, double);
};

#endif /* SOMECLASS_H */
#include <iostream>
#include "someClass.hpp"

using std::cout;

int main()
{
    allConversions convertUnits("what?", "what?", "what?", 10);

    cout << convertUnits.inputVal << '\n';
    cout << convertUnits.radians(10) << '\n';
    cout << convertUnits.minutes(10) << '\n';
}

运行:
/Run

只需创建一个函数并将单元类型作为参数传递,而不是在该函数中进行切换。不需要有6个不同的功能来做相同的事情。或者只是拥有一个常量数组而不是使用开关,解决这个问题的方法太多了。就我个人而言,我不会尝试复制
javascript
。忽略
javascript
并查看规范,然后在
C++
中制作一些满足它们的东西。@Galik:谢谢你的回复。我只是想澄清一下,我有时会将对象嵌套在对象中(如果需要,我可以给出一个示例)。类中的hashmap或继承是否更适合处理此问题?同样,它将取决于确切的上下文。可能一个具有hashmap属性的类更好,或者嵌套hashmaps,或者两个单独的类更好。这实际上取决于对象定义得有多好。在定义足够的情况下,您通常应该更喜欢类而不是哈希映射。