gpt4 book ai didi

c++ - 使用带有 std::array 作为参数的 std::make_shared 初始化 std::shared_ptr

转载 作者:行者123 更新时间:2023-12-02 02:50:55 28 4
gpt4 key购买 nike

我不明白为什么这工作正常:

std::array<double, 2> someArray = {0,1};
std::shared_ptr<MyClass> myobj = std::make_shared<MyClass>(someArray);

但这不起作用:

std::shared_ptr<MyClass> myobj = std::make_shared<MyClass>({0,1});

编译器说:

too many arguments to function ‘std::shared_ptr< _Tp> std::make_shared(_Args&& ...)
...
candidate expects 1 argument, 0 provided

问题:有人可以澄清为什么会发生这种情况,以及是否有任何方法可以在不定义额外变量的情况下修复第二种方法?

<小时/>

编辑:MyClass 示例:

#include <memory> //For std::shared_ptr
#include <array>
#include <iostream>

class MyClass{
public:
MyClass(std::array<double, 2> ){
std::cout << "hi" << std::endl;
};
};

最佳答案

花括号初始化器 {} 永远无法推导为类型(在模板上下文中)。一个特殊情况是 auto,它被推导为 std::initializer_list。您始终必须明确定义类型。

auto myobj = std::make_shared<MyClass>(std::array<double, 2>{0, 1});

关于c++ - 使用带有 std::array 作为参数的 std::make_shared 初始化 std::shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58138263/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com