170 похожих чатов

А помогите ка понять template <class T> struct B; struct A {

B<A> b;
};
template <class T,
typename std::enable_if_t<std::is_same<T, A>::value, bool> = true>
struct B {
A a;
};

вот в случае такой зависимости между типами, как сделать чтобы работало?

33 ответов

13 просмотров

получается ты хочешь в A хранить A?

Нельзя хранить где-то по значению что-то, что ещё не определено. Никак нельзя. Хранимое надо сначала определить. Либо хранить ссылку на хранимое, в любом виде.

Ilya Zviagin
Нельзя хранить где-то по значению что-то, что ещё ...

ага, а такой код почему не работает? template <class T> struct B; struct A { void b(B<A> t) {}; }; template <class T, typename std::enable_if_t<std::is_same<T, A>::value, bool> = true> struct B {};

ǧ̥̹̤̪̉l̜̦̇̈͋a̮͕̭͙̗̓̓͑z̓̏ä͈̟͔́͌͌͋_̤̼̍p̙̘͙̮͑̓̔̃̄r͚͓̰͇ͫ͑̑͒a͕̬͈͋͊̽v
ага, а такой код почему не работает? template <cla...

И нет, не "работает" :) x.cpp:4:24: error: implicit instantiation of undefined template 'B<A>' struct A { void b(B<A> t) {}; }; ^ x.cpp:3:8: note: template is declared here struct B; ^ x.cpp:5:1: error: too many template parameters in template redeclaration template <class T, typename std::enable_if_t<std::is_same<T, A>::value, bool> = true> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ x.cpp:2:1: note: previous template declaration is here template <class T> ^~~~~~~~~~~~~~~~~~ 2 errors generated.

ǧ̥̹̤̪̉l̜̦̇̈͋a̮͕̭͙̗̓̓͑z̓̏ä͈̟͔́͌͌͋_̤̼̍p̙̘͙̮͑̓̔̃̄r͚͓̰͇ͫ͑̑͒a͕̬͈͋͊̽v
ага, а такой код почему не работает? template <cla...

А что ты вкладываешь в понятие "код работает" в данном случае ? Это шаблоны, это не классы или фунции, они могут даже компилироваться без инстанциирования (испльзования), ничего не будет плохого

template <class T> struct B; // тут написано -- у меня будет какой-то шаблон класса с одним шаблонным параметром. struct A { B<A> b; // тут ты пишешь -- я хочу инстанциировать мой шаблон B, который я ещё не определил, и положить этот инстанс шаблона по значению в A // ТАК БЛ... ШАБЛОН КЛАССА B ДОЛЖЕН БЫТЬ ТУТ ОПРЕДЕЛЁН !!! }; // ЭТОТ КОД УЖЕ НЕ СУЩЕСТВЕНЕН ДЛЯ РАССМОТРЕНИЯ template <class T, typename std::enable_if_t<std::is_same<T, A>::value, bool> = true> struct B { A a; }; Ну и главное — если ты не умеешь пока в шаблоны — не используй их, в С++ полно других выразительных средств. Сделай пока на обычном динамическом полиморфизме хотя бы

Ilya Zviagin
template <class T> struct B; // тут написано -- у...

Пуся template <class T> struct B; struct A { void b(B<A> t) {}; }; template <class T, typename std::enable_if_t<std::is_same<T, A>::value, bool> = true> struct B {};

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

ǧ̥̹̤̪̉l̜̦̇̈͋a̮͕̭͙̗̓̓͑z̓̏ä͈̟͔́͌͌͋_̤̼̍p̙̘͙̮͑̓̔̃̄r͚͓̰͇ͫ͑̑͒a͕̬͈͋͊̽v
Не обратил, обрати больше

Больше не могу, не вижу смысла тратить на это время. всё написал. Что-то другое надо мне делать.

Kirill Bolshakov
А не, скорее всего не должно это работать

не может оно работать без определения B в точке инстанциации B<A>

ǧ̥̹̤̪̉l̜̦̇̈͋a̮͕̭͙̗̓̓͑z̓̏ä͈̟͔́͌͌͋_̤̼̍p̙̘͙̮͑̓̔̃̄r͚͓̰͇ͫ͑̑͒a͕̬͈͋͊̽v
Пуся template <class T> struct B; struct A { void...

тот же абсолютно пример, в конструкторе юзается неполный тип, компилятор пока что не может его размер вычислить

Kirill Bolshakov
У тебя forward declaration не согласован с определ...

Ну это не очень тут важно... Важно, что при агрегации должно быть определение, если идёт инстанциация, то и определение шаблона.

Kirill Bolshakov
Лучше скажи какую задачу ты решаешь, зачем тебе та...

У меня есть классы, компактные тегованый поинтеры, типа. И вот у них информация затирается тоесть они внутри как воид поинтеры , и если надо через методы и инфу о типах с шаблона кастуются адекватно. Плюс ещё инварианты указаны на энейблах. Конструкторы не упоминают типы. Ну и там ещё куча всего

Перепиши свой так : template <class T> struct B; struct A { B<A> *b; }; И всё будет ок...

Попробую ещё и я. Инстанс B<A> содержит внутри поле типа A. A содержит в себе поле типа B<A>, который содержит внутри A, который... Получается что-то такое: B<A> { A { B<A> { A { ... } } } } Эта цепочка никогда не прерывается в вашем случае. Компилятор никогда не дойдёт до её конца Скорее всего, вы запутались в собственных рассуждениях и написали не то, что имели ввиду, но всё ещё не подозреваете об этом

Ofee Oficsu
Попробую ещё и я. Инстанс B<A> содержит внутри пол...

Лучше попробуй на этом template <class T> struct B; struct A { void b(B<A> t) {}; }; template <class T, typename std::enable_if_t<std::is_same<T, A>::value, bool> = true> struct B {};

Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!

ǧ̥̹̤̪̉l̜̦̇̈͋a̮͕̭͙̗̓̓͑z̓̏ä͈̟͔́͌͌͋_̤̼̍p̙̘͙̮͑̓̔̃̄r͚͓̰͇ͫ͑̑͒a͕̬͈͋͊̽v
Лучше попробуй на этом template <class T> struct ...

а че чтобы по значению передать чем то отличается от хранения в этом случае?

ǧ̥̹̤̪̉l̜̦̇̈͋a̮͕̭͙̗̓̓͑z̓̏ä͈̟͔́͌͌͋_̤̼̍p̙̘͙̮͑̓̔̃̄r͚͓̰͇ͫ͑̑͒a͕̬͈͋͊̽v
Лучше попробуй на этом template <class T> struct ...

struct A; template <class T, typename std::enable_if_t<std::is_same<T, A>::value, bool> = true> struct B {}; struct A { void b(B<A> t) {}; };

Kelbon
а че чтобы по значению передать чем то отличается ...

Ну, теперь B не хранит A, в этом вся разница, рекурсии не возникает

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
32
Hello. Could you please help me with finding all coordinates within a radius using a spatial index, given that I have a table with coordinates? SET @lng = 37.57925; SET @lat ...
Rinchin G
7
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Всех приветствую. Направьте меня в нужное русло. Постепенно переписываю проект с delphi на lazarus. Приложение - обычный windows/linux клиент для бд firebird. Тут все хорошо. ...
Mishutka
8
Привет всем, подскажите, есть сайт на ево 1.4, надо сделать его мультиязычным, структура документов одинаковой останется, чисто тексты разные, свои тв для каждого языка, поддо...
Oleg
7
@rouse_79 https://github.com/AlexanderBagel/FWZip/blob/8c6882a31ffaa9a23e66e22eaa5b1f7ebfcad43c/zlib_external.pas#L393 Почему Си-шная функция memset, параметр отвечающий за з...
notme
8
{"fieldValue":[ {"title":"Alkmaar","coords":"52.62689992095562, 4.771862510168792","address":"Edisonweg 1","zip":"1821 BN","city":"Alkmaar","description":"ma-vr: 07:00-17:00"...
Marc Hoogstrate
4
А что ты ставишь? Релиз или текущую версию?
Aliaksandr Sadouski
9
Карта сайта