C+中是否有完全通用的对象+;比如JavaScript? JavaScript是动态类型的,而C++是静态类型的。

C+中是否有完全通用的对象+;比如JavaScript? JavaScript是动态类型的,而C++是静态类型的。,c++,object,javascript-objects,cross-language,C++,Object,Javascript Objects,Cross Language,在JavaScript中,当我编写时: var object = {}; 我创建了一个“完全通用”的对象,即它没有成员/功能,但通过稍后添加该成员,它可以拥有我们喜欢的任何成员 我可以在C++中创建或模拟这种对象吗? < P> JavaScript是动态类型的,而C++是静态类型的。 在JavaScript中,正如您在示例中所示,您只需要编写变量名,而不需要添加类型。之后,您可以指定字符串值,也可以指定int值或任何其他类型的值 例如: var first; var second; std:

在JavaScript中,当我编写时:

var object = {};
我创建了一个“完全通用”的对象,即它没有成员/功能,但通过稍后添加该成员,它可以拥有我们喜欢的任何成员


我可以在C++中创建或模拟这种对象吗?

< P> JavaScript是动态类型的,而C++是静态类型的。 在JavaScript中,正如您在示例中所示,您只需要编写变量名,而不需要添加类型。之后,您可以指定字符串值,也可以指定int值或任何其他类型的值

例如:

var first;
var second;
std::string str_value;
float float_value;
int int_value;
<>在C++中,你必须用变量.< /p>声明变量的类型。 例如:

var first;
var second;
std::string str_value;
float float_value;
int int_value;

答案大多是否定的,你不能。。在JavaScript中,
对象
可以被比作字典或从键到类型化值的映射,值及其类型都可以在运行时设置

可以使用C++的类型擦除能力和键的字符串创建任意类型的值字典。使用此方法,您可以编写:

using generic_object = std::unordered_map<std::string, std::any>
generic_object object;
object["foo"] = 123;
object["bar"] = [](char c) -> char { return c+1; };
object["baz"] = std::vector<int>{4,5,6,7};
std::any_cast<std::vector<int>>(object["bar"])[2] = 3 + std::any_cast<int>(object["foo"]);
使用generic\u object=std::无序\u映射
通用对象;
对象[“foo”]=123;
对象[“bar”]=[](char c)->char{return c+1;};
对象[“baz”]=std::vector{4,5,6,7};
std::any_cast(object[“bar”])[2]=3+std::any_cast(object[“foo”]);
不能在普通对象中使用新的简单字段,即不能编写简单的C++语法:

使用generic_object=/*无论什么*/;
通用对象;
object.foo=123;//编译错误从这里开始!
object.bar=[]()->char{return c+1;}
object.baz=std::vector{4,5,6,7};
object.baz[2]=3+object.foo;

STD::你可能想要一本C++教科书——试图把JavaScript转换成C++是不有效的。检查C++书的章节。C++是类型化的;你不能没有一个非类型化的对象。@ EnPoCulm——也许其他人警告OP,在不学习C++的情况下,尝试将C++的其他方面转换成(或翻译)其他方面的陷阱,或者在编写C++代码时使用JavaScript作为模型。这个问题是取决于你想用这些对象做什么。请添加更多用例,使之成为一个可回答且有用的问题。我想大多数人误解了我说的意思object@Nikasmusicandgaming:你的问题必须更明确。您可以描述如何看到C++对象的行为,以及创建对象后要做的事情。幸运的是,我使用Javascript,所以我更清楚地知道在创建空对象后会如何处理它——但是如果你想得到好的答案,不要依赖运气。
struct {
   int foo { 123 };
   char bar(char c) const { return c+1; }
   std::vector<int> baz {4,5,6,7};
} object;
object.baz[2] = 3 + object.foo;
std::cout << "'a' becomes " << object.bar('a') << '\n';