#include <iostream>
#include <memory>
class Base
{
public:
Base() {}
};
class Derived : public Base
{
public:
Derived() {}
Derived(std::initializer_list<std::pair<int, std::shared_ptr<Base>>>) {}
};
int main(int argc, char ** argv)
{
auto example = new Derived({
{ 0, std::make_shared<Derived>() }
});
return 0;
}
它的工作原理(live preview)make_shared正常,但是當我嘗試使用std::make_shared
與std::initializer_list
作爲參數,我得到了錯誤:的std ::用的std :: initializer_list
auto example = new Derived({
{ 0, std::make_shared<Derived>({
{ 0, std::make_shared<Derived>() }
}) }
});
正如你可以在這裏看到在live preview。
error: too many arguments to function...
當我做它的工作只有這個(live preview):
auto example = new Derived({
{ 0, std::make_shared<Derived>(std::initializer_list<std::pair<int, std::shared_ptr<Base>>> {
{ 0, std::make_shared<Derived>() }
}) }
});
我想知道的是:爲什麼它的工作原理,只有當我通過std::initializer_list
作爲參數上std::make_shared
,而不是使用{{}}
剛像這樣:
auto example = new Derived({ { 0, std::make_shared<Base>() } });
難道可以讓std::make_shared
接受嗎?
在此先感謝。
支撐初始值設定項不是表達式,也沒有類型。因此,'make_shared'的模板類型推導不能推導出它。 – dyp