[英]Can an object be constructed in place of an argument in c++ like we do in Java?
在 java 中,这样的事情是可能的(显示为示例)
new Thread(new Runnable() {
/*.....code.......*/
});
我们在 object 构造函数(线程类)的参数中提供了就地构造和定义的 object( Runnable()
)。 我们可以在 c++ 中做类似的事情吗?
我想在我的代码中做的是
void put(int key, int value) {
store.insert(store.begin(), vector<int> {{key, value}});
}
/**
type(store) = vector<vector<int>>
*/
并避免类似的事情
void put(int key, int value) {
vector<int> temp{key, value};
store.insert(store.begin(), temp);
}
首先感谢大家在评论中的帮助和建议。 有什么东西在我脑海里响起,我想我设法找到了答案。 这有效
void put(int key, int value) {
store.insert(store.begin(), vector<int>({key, value}));
}
说明: vector<int>()
是我提供值列表{key, value}
来构造向量的构造函数。
除了大家共享的知识。 您可能想查看有关为什么此代码有效的解释。
要回答您的第一个问题:您的 Java 代码与可运行文件创建一个匿名 class 与自定义构造函数,类似的东西在 C++ 中不存在(据我所知)。
但是,没有它,C++ 也能正常工作。 可以为线程提供 lambda,如下所示:
thread t([](){
std::cout << "hi from thread" << std::endl;
});
对于您的另一个问题:向量可以从初始化列表构造,这意味着这些事情是有效的:
vector<int> list_1(4,5); // take care!! list is 5,5,5,5!
vector<int> list_2{4,5}; // list_2 is 4,5
vector<int> list_3 = {4,5}; // list_3 is 4,5
list_1 = {1,2,3}; // list_1 is now 1,2,3
// all the above are using so called initializer lists
vector<vector<int>> store;
store.insert(store.begin(), {1,3}); // store is {{1,3}}
store.insert(store.begin(), {1,3,3});// store is {{1,3},{1,3,3}}
store = {{4},{7,8},{1,2,3}}; // store is {{4},{7,8},{1,2,3}}
struct KV{int key; int value;};
vector<KV> store2{{1,5},{7,8}}; // store has two KVs,{1,5} and {7,8}
store2.insert(store2.begin(), {3,3});// ... and now also {3,3}
// note:creating a KV by doing KV x{4,5} is called
// uniform initialization.
// it's the same syntax as list initializers, but they are different
// things!
Java 可以定义一个没有名称的类(并实例化它)称为匿名 class。 C++ 不能这样做,您问题中的示例 C++ 代码与您的 java 代码相比是不同的。 您必须在 C++ 中明确定义结构或 class
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.