Добавил shared_from_this как основной способ создать умный указатель на "себя". Добавил пример работы с ним
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
class SaveMap;
|
||||
|
||||
class ISave
|
||||
class ISave : public std::enable_shared_from_this<ISave>
|
||||
{
|
||||
public:
|
||||
virtual ~ISave() = default;
|
||||
|
||||
@@ -56,14 +56,14 @@ SaveMap::SaveMap(const std::string& json_data)
|
||||
size_t end = i = json_data_blank.find_first_of(",}", i);
|
||||
i++;
|
||||
std::string value = json_data_blank.substr(begin, end - begin);
|
||||
save_long[name.c_str() + 1] = std::stoll(value);
|
||||
save_long[name.c_str() + 1] = std::stoll(value); // (name.c_str() + 1) - отсекаем метаданные
|
||||
} else if (name[0] == 'd')
|
||||
{
|
||||
size_t begin = json_data_blank.find(':', i) + 1;
|
||||
size_t end = i = json_data_blank.find_first_of(",}", i);
|
||||
i++;
|
||||
std::string value = json_data_blank.substr(begin, end - begin);
|
||||
save_double[name.c_str() + 1] = std::stod(value);
|
||||
save_double[name.c_str() + 1] = std::stod(value); // (name.c_str() + 1) - отсекаем метаданные
|
||||
} else if (name[0] == 's')
|
||||
{
|
||||
size_t begin = json_data_blank.find(':', i) + 2;
|
||||
@@ -74,7 +74,7 @@ SaveMap::SaveMap(const std::string& json_data)
|
||||
value = json_data_blank.substr(begin, end - begin);
|
||||
else
|
||||
value = "";
|
||||
save_string[name.c_str() + 1] = value;
|
||||
save_string[name.c_str() + 1] = value; // (name.c_str() + 1) - отсекаем метаданные
|
||||
} else if (name[0] == 'o')
|
||||
{
|
||||
size_t begin = i = json_data_blank.find('{', i);
|
||||
@@ -100,10 +100,10 @@ SaveMap::SaveMap(const std::string& json_data)
|
||||
std::shared_ptr<ISave> object_ptr(MakeObjectByName(object_name));
|
||||
|
||||
object_ptr->load(std::make_shared<SaveMap>(object_json));
|
||||
save_objects[name.c_str() + 1] = object_ptr;
|
||||
save_objects[name.c_str() + 1] = object_ptr; // (name.c_str() + 1) - отсекаем метаданные
|
||||
} else if (name[0] == 'v')
|
||||
{
|
||||
std::string key = name.substr(2, name.length() - 2);
|
||||
std::string key = name.substr(2, name.length() - 2); // (off = 2) - отсечение метаданных; (name.length() - 2) - отсечение кавычки и перевод в индексы
|
||||
|
||||
size_t begin_arr = i = json_data_blank.find('[', i);
|
||||
int open = 1, close = 0;
|
||||
|
||||
Reference in New Issue
Block a user