Javascript到C++;:对象等价物? 我已经被要求把一些代码从JavaScript转换成C++。虽然我非常熟悉JavaScript,但我对C++没有经验。
javascript代码大量使用对象。例如,以下代码用于将角度从度转换为任何其他指定单位: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
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,或者两个单独的类更好。这实际上取决于对象定义得有多好。在定义足够的情况下,您通常应该更喜欢类而不是哈希映射。