Size: a a a

2020 September 14

TW

Tony Werner in pro.cxx
N 2
в c++ никакими костылями нельзя сделать extension метод? Точнее даже не экстншн метод, а в плане синтаксиса чтобы после имени объекта вызывать функцию которая что-то делает
это вам не c#)
источник

N2

N 2 in pro.cxx
с этим жесть тяжко конечно, ну ждем c++ 38 там наверное добавят
источник

P

PRoSToC0der in pro.cxx
Tony Werner
это вам не c#)
и не rust
источник

TW

Tony Werner in pro.cxx
PRoSToC0der
и не rust
не шарю за него
источник

DD

Dmitry Dzyuba in pro.cxx
N 2
в c++ никакими костылями нельзя сделать extension метод? Точнее даже не экстншн метод, а в плане синтаксиса чтобы после имени объекта вызывать функцию которая что-то делает
можно сделать template-обертку, если не страшно
источник

OZ

Olzhas Zhumabek in pro.cxx
N 2
в c++ никакими костылями нельзя сделать extension метод? Точнее даже не экстншн метод, а в плане синтаксиса чтобы после имени объекта вызывать функцию которая что-то делает
уверен что макросами и темплейтами это как то можно соорудить, но есть обычные функции, которые ничем не хуже. Иногда даже лучше
источник

N2

N 2 in pro.cxx
Dmitry Dzyuba
можно сделать template-обертку, если не страшно
Ну я спрашиваю про костыли, так что давайте подробнее
источник

P

PRoSToC0der in pro.cxx
N 2
в c++ никакими костылями нельзя сделать extension метод? Точнее даже не экстншн метод, а в плане синтаксиса чтобы после имени объекта вызывать функцию которая что-то делает
можно как в ranges перегрузить какой-нибудь operator|
источник

АК

Александр Караев... in pro.cxx
N 2
в c++ никакими костылями нельзя сделать extension метод? Точнее даже не экстншн метод, а в плане синтаксиса чтобы после имени объекта вызывать функцию которая что-то делает
сейчас в C++ принято расширяться на ниблоидах, которые в качестве одного из вариантов могут сходить в мембер-функцию
источник

DD

Dmitry Dzyuba in pro.cxx
Самый простой способ - делается class template, который наследуется от расширяемого типа. В него добавить нужный метод. Останется только решить каким из способов в коде получить нужный "шаблонный" тип. Скорее всего тут помогут конструкторы копирования и перегрузка операторов приведения типа. Вобщем мнооого стремного кода.
источник

OZ

Olzhas Zhumabek in pro.cxx
можно сделать как Андрей Александреску. Макрос который генерит кусок лямбды. Но я бы не хотел чтобы те кто поддерживает код знали мой номер или где я живу
источник

N2

N 2 in pro.cxx
Dmitry Dzyuba
Самый простой способ - делается class template, который наследуется от расширяемого типа. В него добавить нужный метод. Останется только решить каким из способов в коде получить нужный "шаблонный" тип. Скорее всего тут помогут конструкторы копирования и перегрузка операторов приведения типа. Вобщем мнооого стремного кода.
Ну в итоге жесть получается, надо для каждого типа писать такую обертку, к тому же универсального типа типа object нету поэтому если какую-то мелкую утилиту типо котлиновских apply let run и прочего хочешь сделать надо будет для каждого фигачить, ладно придется мучаться
источник

DD

Dmitry Dzyuba in pro.cxx
N 2
Ну в итоге жесть получается, надо для каждого типа писать такую обертку, к тому же универсального типа типа object нету поэтому если какую-то мелкую утилиту типо котлиновских apply let run и прочего хочешь сделать надо будет для каждого фигачить, ладно придется мучаться
Проблема в том, что C++ строго типизированный язык. И в какой-то момент мы перейдем от исходного типа, к нашему "расширенному" и это не заметно не пройдет.
источник

N2

N 2 in pro.cxx
да там если подумать проблем еще тонна, например передать в функцию такую обертку это геморой(надо делать шаблонной)
источник

P

PRoSToC0der in pro.cxx
PRoSToC0der
можно как в ranges перегрузить какой-нибудь operator|
источник

N2

N 2 in pro.cxx
да эта крутая фича но непривычная хотя можно попробовать
источник

DD

Dmitry Dzyuba in pro.cxx
Красиво!
источник

N2

N 2 in pro.cxx
Жалко только что при таком способе чтобы потом вызвать метод объекта надо ставить скобки
источник

P

PRoSToC0der in pro.cxx
N 2
Жалко только что при таком способе чтобы потом вызвать метод объекта надо ставить скобки
ага(, можно конечно методы объекта привести в такой же вид...
источник

P

PRoSToC0der in pro.cxx
или какой-нибудь универсальный шаблон написать, который будет принимать ссылку на метод
источник