Re: Шаблони вузлів (node). template<typename T, unsigned int N, ...>
Неможливо в С++ створити контейнер що мiстить "довiльний" тип даних.
std::vector<void*> any;
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Шаблони вузлів (node). template<typename T, unsigned int N, ...>
Для відправлення відповіді ви повинні увійти або зареєструватися
Неможливо в С++ створити контейнер що мiстить "довiльний" тип даних.
std::vector<void*> any;
wander, менi подобаються вашi коментари, то ж не розочаровуйте мене. Вектор вказiвникiв на void це вектор вказiвникiв на void i нiчого окрiм того. Навiть контейнер std::vector<std::any> як це не дивно, для багатьох, є std::vector<std::any>. То ж моє питання зосталось без вiдповiдi. Мабуть ТС дуже пишається собою. Ну що ж... Ми всi маємо на це право. Але пiдстави в усiх рiзнi)
Зупинився на такій версії (C++11+):
#define STRUCT(S, T, N, R) struct R; \
struct S { \
static const decltype(N) ptr_count = N; \
using data_t = T; \
using next_t = R; \
using this_t = S; \
data_t data = data_t(); \
next_t *ptr[N] = { nullptr }; \
};
#define NODE(A) node_##A##_t
#define TYPE(A, B) STRUCT(NODE(A), T_##A, N_##A, NODE(B))
#define T(A) typename T_##A, unsigned int N_##A
template<T(a)>
struct mono {
TYPE(a, a)
};
template<T(a), T(b)>
struct duo {
TYPE(a, b)
TYPE(b, a)
};
template<T(a), T(b), T(c)>
struct trio {
TYPE(a, b)
TYPE(b, c)
TYPE(c, a)
};
#undef STRUCT
#undef NODE
#undef TYPE
#undef T
Тобто, якщо
leofun01 написав:вузли такого ж типу як вони самі
то ...
Ця частина вже не актуальна. Вона там була погано описана.
Краще орйентуватись на те що є тепер (в цьому повідомленю).
.. це остання спроба якось з вами спiлкуватися. Ви наче не бачили моє повiдомлення ..
Я не такий швидкий як ви. Наберіть витримки, деякі відповіді приходять через роки.
.. де я спитав про вашу цiль. Вона сформульована суперечно.
Так і є. На час створеня топіка я ще не вмів чітко формувати шо я хочу. В основному, причина була в не знанні власних можливостей. Користувач в 2016 і користувач в 2024 - не той самий користувач (стан організму змінений, дані оновлено).
Пане leofun01. Ви не вiдповiли на мoї питання. Перелiк їх, та пояснення причин - стан, брак швидкостi, тощо, - не потрiбнi. Ви вiдкрили топiк i витратили щомало часу, але його цiль невiдома. "Бажаю щоб юзеру було зручно", це демонстрацiя нерозумiння сутi не питання як такого, а сенсу мотиву запитаннь у будь якому прекметному обговореннi. Я вважаю що проблема не в вас окремо. Хоча i в вас зокрема. Увесь форум має ваду незрозумiлих питаннь у композицiї з вiдсyтнiсттю дiалогу задля їх пояснення. Хто буде читати многпостові топики без ясного заголовку i вiдповiдного змiсту? Люди шукають змicт для вирiшення своїх завданнь. Який поiсковик видасть добру статiстику?
Добре. Хай воно так i буде.
Щодо топiку. В мене є деякий досвiд з технiкою type erasure i я не бачу ясної мети. До того ж, практика макровизначеннь це опцiя задля випадкiв, коли без неї неможливо. То ж я не бачу сенсу i можливостi продовжити обговорення.
I так. Я вважаю що вiдповiдати треба якомога швидше, навiть якщо ти не є топiкстартером.
Дуже вже воно мене тиснуло, тому переписав
#define L(A, B) STRUCT(NODE(A), T_##A, N_##A, NODE(B))
#define T(A) typename T_##A, unsigned int N_##A
#define G(NAME, ...) template<__VA_ARGS__> struct NAME
G(mono, T(a) ) { L(a, a) };
G(duo , T(a), T(b) ) { L(a, b) L(b, a) };
G(trio, T(a), T(b), T(c)) { L(a, b) L(b, c) L(c, a) };
#undef STRUCT
#undef NODE
#undef L
#undef T
#undef G
Задачу порішав. Топік закрито.
Для відправлення відповіді ви повинні увійти або зареєструватися