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

Кто в шаблонах разбирается, подскажите, пожалуйста. Я что-то нелегальное делаю? Вроде

бы обычный шаблон для разных размеров битсетов должен быть. Или для union прямо настолько жесткие ограничения?
https://godbolt.org/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fontScale:14,fontUsePx:'0',j:1,lang:c%2B%2B,selection:(endColumn:9,endLineNumber:30,positionColumn:9,positionLineNumber:30,selectionStartColumn:9,selectionStartLineNumber:30,startColumn:9,startLineNumber:30),source:'%23include+%3Cbitset%3E%0A%23include+%3Ciostream%3E%0Ausing+namespace+std%3B%0Aunion+move_ty+%7B%0A%09bitset+%3C2%3E+bs2%3B%0A%09bitset+%3C3%3E+bs3%3B%0A%09bitset+%3C4%3E+bs4%3B%0A%09bitset+%3C5%3E+bs5%3B%0A%7D%3B%0Aclass+unionarray_ty+%7B%0Apublic:%0A%09unionarray_ty()+%7B%7D%3B%0A%09template+%3Ctypename+T%3E%0A%09//requires+std::is_same_v%3CT,+bitset%3C2%3E%3E+%7C%7C+std::is_same_v%3CT,+bitset%3C3%3E%3E+%7C%7C+std::is_same_v%3CT,+bitset%3C4%3E%3E+%7C%7C+std::is_same_v%3CT,+bitset%3C5%3E%3E%0A%09T%26+operator%5B%5D(int+idx)+%7B%0A%09%09if+(idx+%3D%3D+0)+%7B%0A%09%09%09return+myUnion.bs2%3B%0A%09%09%7D%0A%09%09else+if+(idx+%3D%3D+1)+%7B%0A%09%09%09return+myUnion.bs3%3B%0A%09%09%7D%0A%09%09else+if+(idx+%3D%3D+2)+%7B%0A%09%09%09return+myUnion.bs4%3B%0A%09%09%7D%0A%09%09else+if+(idx+%3D%3D+3)+%7B%0A%09%09%09return+myUnion.bs5%3B%0A%09%09%7D%0A%09%7D%3B%0A%0Aprivate:%0A%09move_ty+myUnion%7B+0+%7D%3B%0A%09int+idx%7B+0+%7D%3B%0A%7D%3B%0Aint+main()%7B%0A++++unionarray_ty+u%3B%0A++++cout+%3C%3C+u%5B0%5D+%3C%3C+endl%3B%0A%7D%0A'),l:'5',n:'0',o:'C%2B%2B+source+%231',t:'0')),k:45.61787060721824,l:'4',m:100,n:'0',o:'',s:0,t:'0'),(g:!((h:compiler,i:(compiler:g132,deviceViewOpen:'1',filters:(b:'0',binary:'1',binaryObject:'1',commentOnly:'0',debugCalls:'1',demangle:'0',directives:'0',execute:'1',intel:'0',libraryCode:'0',trim:'1'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:1,lang:c%2B%2B,libs:!(),options:'-std%3Dc%2B%2B20',overrides:!(),selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:1),l:'5',n:'0',o:'+x86-64+gcc+13.2+(Editor+%231)',t:'0')),header:(),k:36.384750998896195,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((h:output,i:(compilerName:'x86-64+gcc+13.2',editorid:1,fontScale:14,fontUsePx:'0',j:1,wrap:'1'),l:'5',n:'0',o:'Output+of+x86-64+gcc+13.2+(Compiler+%231)',t:'0')),k:17.997378393885562,l:'4',n:'0',o:'',s:0,t:'0')),l:'2',n:'0',o:'',t:'0')),version:4

12 ответов

10 просмотров

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

А как ты этот метод собираешься инстанциировать ? template <typename T> //requires std::is_same_v<T, bitset<2>> || std::is_same_v<T, bitset<3>> || std::is_same_v<T, bitset<4>> || std::is_same_v<T, bitset<5>> T& operator[](int idx) { По параметрам это невозможно, значит, можно только лишь ЯВНО инстанциировать эту функцию при вызове, причём, надо указывать не операцию [] , а именно реализующую её функцию-член. С явным указанием параметра-типа из шаблона. А у тебя в коде не так.

М- Автор вопроса
Ilya Zviagin
А как ты этот метод собираешься инстанциировать ? ...

Тогда, наверное сделаю idx тоже шаблонным параметром и использую его для размера битсета, должно же получиться?

проблема в том, что даже после инстанцирования ( например, так u.operator[]<bitset<2>>(0) ), operator[] с подставленным типом в разных return возвращает разные типы (bitset<2>, .. bitset<5>), а это не позволено

L
проблема в том, что даже после инстанцирования ( н...

Нет это позволено, даже в в стандартной библиотеке есть куски которые вот это используют например в варианте, проблема в другом что такие функции нужно инсценировать явно, указанием в месте вызова шаблонного параметр в явном виде , но это явно не то что хотел автор

Ilya Zviagin
Нет это позволено, даже в в стандартной библиотеке...

разве это возможно? в смысле, если все шаблонные параметры инстанцированы, и при этом разные ветки return (если откинуть все ветки constexpr if и всего прочего, что можно разрешить шаблонами) возвращают разные типы, не приводимые друг к другу? разве не получается, что тип возвращаемоего значения будет зависеть от рантайм аргумента?

М- Автор вопроса
L
разве это возможно? в смысле, если все шаблонные ...

Да, это не возможно, тип возвращаемого значения зависит от рантайм аргумента. Можно было бы сделать вызовы с явным типом, что-то вроде array<bitset<2>>[0], но мне нужна работа в рантайме.

L
разве это возможно? в смысле, если все шаблонные ...

Частым применением этого является реализация собственных функции преобразования типов, как например в библиотеке Qt, при этом тип в который нужно преобразовать указывается при вызове как параметр инстанциирования шаблона функции преобразования

Это возможно и у тебя тип результата не зависит от типа аргумента , и он не определяется в рантайме

М- Автор вопроса
Ilya Zviagin
Это возможно и у тебя тип результата не зависит от...

Тип зависит от параметра, параметр известен только в рантайме, он не constexpr

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

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

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта