Ich möchte eine boost::shared_ptr<std::vector<std::string> > vec
in der Konstruktor initialisieren Liste mit einem boost::shared_ptr<std::list<std::string> > list
initialisieren?Boost initialisieren :: shared_ptr <std :: vector <T>> mit boost :: shared_ptr <std::list<T>>
Ist es möglich?
Ich versuchte dies:
Test.hpp
class Test
{
public:
Test(boost::shared_ptr<std::list<std::string> > list);
private:
boost::shared_ptr<std::vector<std::string> > vec;
};
Test.cpp
Test::Test(boost::shared_ptr<std::list<std::string> > list) : vec(list->begin(), list->end())
{
}
Teil der Fehlermeldung:
Test.cpp: In constructor ‘Test::Test(boost::shared_ptr<std::list<std::basic_string<char> > >)’:
Test.cpp:6:85: error: no matching function for call to ‘boost::shared_ptr<std::vector<std::basic_string<char> > >::shared_ptr(std::list<std::basic_string<char> >::iterator, std::list<std::basic_string<char> >::iterator)’
Natürlich nicht. Dies sind verschiedene Arten. Sie müssen den Vektor erstellen und den Listeninhalt dorthin kopieren. –
Obwohl es gültige Fälle für gemeinsam genutzte Zeiger auf Container gibt, sind Sie sicher, dass Sie hier Container für die gemeinsame Lebensdauer und die dynamische Zuweisung von Ef-Containern benötigen? – TartanLlama
Nur eine Bemerkung: 'boost :: shared_ptr' ist Geschichte. Verwenden Sie stattdessen C++ 11-Standardfunktionen: 'std :: shared_ptr'. – rustyx