С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,792
Записей в блоге: 4
1

Извлечь список из объекта

29.01.2023, 00:22. Показов 457. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть такой код, который форумчане мне помогли построить.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
template <class T, class U>struct Typelist{};
class NullType{};
 
template < 
typename T1=NullType,typename T2=NullType,typename T3=NullType,typename T4=NullType,
typename T5=NullType,typename T6=NullType,typename T7=NullType,typename T8=NullType
>
class ListType{
typedef typename ListType<T2,T3,T4,T5,T6,T7,T8>::Result Tail;
public:typedef Typelist<T1,Tail> Result;};
 
template <>class ListType<>{
public:typedef NullType Result;};
 
template<class TList> struct Length;
template<>struct Length< NullType >{
    enum{value = 0 };};
template <class T, class U>
struct Length< Typelist<T, U> >{
    enum{value = 1 + Length<U>::value };};
 
template <class TList, long Index> struct TypeAt;
 
template <class Head, class Tail>
struct TypeAt<Typelist<Head, Tail>, 0>{
    typedef Head Result;};
 
template <class Head, class Tail, long Index>
struct TypeAt<Typelist<Head, Tail>, Index>{
    typedef typename TypeAt<Tail, Index - 1>::Result Result;};
 
 
template <typename T, long I>
class TupleElement{
public:T & get(){return m_value;}
private:T m_value;};
 
template <typename List, long I = 0>
class TupleImplType;
    
template <typename T, typename U, long I>
class TupleImplType<Typelist<T,U>,I>
    : public TupleElement<T,I>
    , public TupleImplType<U,I+1>{};
 
template <long I>
class TupleImplType<NullType,I>{};
 
template < 
typename T1=NullType,typename T2=NullType,typename T3=NullType,typename T4=NullType,
typename T5=NullType,typename T6=NullType,typename T7=NullType,typename T8=NullType
>
class TupleType:public TupleImplType<typename ListType<T1,T2,T3,T4,T5,T6,T7,T8>::Result>{
    typedef typename ListType<T1,T2,T3,T4,T5,T6,T7,T8>::Result ElementsList;
public:
    template <long Index>
    typename TypeAt<ElementsList, Index>::Result & set(){
TupleElement<typename TypeAt<ElementsList, Index>::Result, Index> & el = *this;return el.get();}
enum{Size = Length<ElementsList>::value};
};
 
 
template<long C,template<long>class T,long Z=1>
class ListStruct{
typedef typename ListStruct<C-1, T, Z + 1>::Result Tail;
public:typedef Typelist<T<Z>, Tail> Result;};
 
template<template<long>class T,long Z>
class ListStruct<0,T,Z>{
public:typedef NullType Result;};
 
template <typename List, long Z = 0>
class TupleImplStruct;
    
template <typename T,typename U,long Z>
class TupleImplStruct<Typelist<T, U>, Z>
    : public TupleElement<T, Z - 1>
    , public TupleImplStruct<U, Z - 1>{};
 
template <>
class TupleImplStruct<NullType,0>{};
template <long a>struct __char{char arr_[a];};
 
template <long T=8>
class TupleStruct:public TupleImplStruct<typename ListStruct<T,__char,1>::Result,T>{ 
typedef typename ListStruct<T,__char>::Result ElementsList;
typedef typename ListType<unsigned char,unsigned short,long,unsigned long long>::Result ElementsType;
public:
    template <long Index>
    typename TypeAt<ElementsList,Index>::Result&set(){
TupleElement<TypeAt<ElementsList,Index>::Result, Index>*el 
= reinterpret_cast< TupleElement<TypeAt<ElementsList, Index>::Result,Index>*>(this);
return el->get();}
 
enum{Size=Length<ElementsList>::value};
 
};
Далее создан объект
C++
1
TupleType<unsigned char,unsigned short,long,unsigned long long>tplValue;
Он представляет собой список обычных типов.
В коде есть клас TupleStruct, который используя одну структуру получает поля от 1 до 8ми байт.
Далее я хочу сделать алгоритм который будет копировать список. Пишу такой класс.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<long a>struct __tuple{decltype(tplValue.set<a>())tupl;};
template <long T=3>
class Struct_Tuple:public TupleImplStruct<typename ListStruct<3,__tuple>::Result,3>{ 
typedef typename ListStruct<T,__tuple,0>::Result ElementsList;
public:
    template <long Index>
    typename TypeAt<ElementsList, Index>::Result&set(){
TupleElement<TypeAt<ElementsList,Index>::Result, Index>*el 
= reinterpret_cast< TupleElement<TypeAt<ElementsList, Index>::Result,Index>*>(this);
return el->get();}
 
enum{Size=Length<ElementsList>::value};
 
};Struct_Tuple<>_Struct_Tuple;
Здесь тоже раскручивается один объект __tuple вместо обычной структуры. На основе объекта tplValue и его полей я хочу получить структуры хранящие поля этого объекта. При создании объекта этого класса получаю ошибку
Код
Tuples.cpp(157): error C2512: Struct_Tuple<>: нет подходящего конструктора по умолчанию
. Возможно ли построить такой объект, если да подскажите как правильно это сделать?
Ещё есть такой вопрос если внутри класса TupleStruct или TupleType создать объект
C++
1
typedef typename ListType<unsigned char,unsigned short,long,unsigned long long>::Result ElementsType;
то его можно использовать например так
C++
1
typename TypeAt<ElementsType,Index>::Result&set()
. Почему нельзя сделать так
C++
1
typename TypeAt<decltype(tplValue),Index>::Result
ведь по сути tplValue содержит поля структуры, можно ли их извлечь оттуда из tplValue, чтобы использовать вместо ElementsList?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.01.2023, 00:22
Ответы с готовыми решениями:

Извлечь координаты из svg объекта
есть svg элемент, заданный координатами path: (d=&quot;M x,y h 'длина' v 'длина' h 'длина' z &quot;). ...

Извлечь список из файла
Народ привет. Есть небольшая проблемка. Есть файл xml,примерно такого содержания: &lt;ITEM...

Как извлечь коэффициенты при переменных в список?
Есть такое выражение: -60 x+100 y-50 z Как получить список {-60, 100, -50}? Где-то натыкался на...

Как получить список файлов в архиве и извлечь только нужные
Подскажите плиз, как получить список файлов в архиве и извлеч только нужные мне файлы в папку. ...

1
143 / 27 / 4
Регистрация: 06.05.2019
Сообщений: 1,792
Записей в блоге: 4
03.02.2023, 21:53  [ТС] 2
Ответ по моему вопросу здесь https://www.cyberforum.ru/post16733288.html.
0
03.02.2023, 21:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.02.2023, 21:53
Помогаю со студенческими работами здесь

Есть список ListBox как извлечь оттуда текст какого то пункта?
Есть список ListBox как извлечь оттуда текст какого то пункта?

Из двух списков извлечь общие элементы, большие заданного N, и поместить их в третий список
напишите,пожалуйста программку на visual prolog

Из двух списков чисел извлечь общие числа, большие данного и поместить их в третий список
Из двух списков чисел извлечь общие числа, большие данного и поместить их в третий список Помогите...

Из двух списков чисел извлечь общие числа, большие данного и поместить их в третий список
Из двух списков чисел извлечь общие числа, большие данного и постить их в третий список.

Как извлечь список (в текстовом виде) названий моих треков из веб-версии Shazam?
Мне нужно распарсить страницу с треками, которые я шазамил, в текстовый вид(группа - композиция)....

Извлечь текст до определенного символа и извлечь из кавычек
Ребята, помогите, пожалуйста, с формулой. есть много текста в ячейках, в каждом тексте есть разные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru