在C++中,std::make_shared函数用于创建一个shared_ptr对象,并将其初始化为给定的参数。然而,当我们想要使用initializer_list作为参数时,std::make_shared函数并不直接支持。但是我们可以通过一些技巧来实现在initializer_list参数的情况下调用std::make_shared。
首先,我们需要定义一个辅助函数,该函数将使用可变模板参数和递归调用来处理initializer_list中的每个元素。然后,我们可以将这个辅助函数作为参数传递给std::make_shared函数。
下面是一个示例代码:
#include <iostream>
#include <memory>
#include <initializer_list>
template<typename T, typename... Args>
std::shared_ptr<T> make_shared_helper(Args&&... args) {
return std::make_shared<T>(std::forward<Args>(args)...);
}
template<typename T, typename... Args>
std::shared_ptr<T> make_shared_with_initializer_list(std::initializer_list<T> initList, Args&&... args) {
return make_shared_helper<T>(initList, std::forward<Args>(args)...);
}
int main() {
auto sp = make_shared_with_initializer_list<int>({1, 2, 3});
for (const auto& num : *sp) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
在上面的示例代码中,make_shared_helper函数用于处理initializer_list中的每个元素,并将其传递给std::make_shared函数。make_shared_with_initializer_list函数则将initializer_list作为第一个参数,并将其余参数传递给make_shared_helper函数。
通过这种方式,我们可以在initializer_list参数的情况下调用std::make_shared,并且可以使用std::shared_ptr来管理动态分配的对象。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云