Войти
ФлеймФорумПрограммирование

Динамические имена функций в Си. (2 стр)

Страницы: 1 2 3 Следующая »
#15
(Правка: 23:31) 23:31, 30 июня 2019
Попробуй через жо*у. Так можно. Но как сделать - это тайна, а пример реализации - тем более. Все-таки у меня в стране запрещена пропаганда этого способа...

#16
16:54, 5 июля 2019

Гри Га к
> Кроме "main()", нужно динамить все функции без назначения, называть как-то
> навроде "а1()", "а2()", и т.д. Понимаете?

Спасет ли фабрика функторов атца русской демократии?

#17
(Правка: 18:14) 18:10, 7 июля 2019

"Динамить" функции в языке С можно через замену указателя, а имя функции здесь не причем. А как это делать это мой секрет и я вам его не расскажу. Дам лишь маленькую подсказку - в языке С# это называется делегаты. А вот в языке С++ с этим раньше была полная жопа, не знаю как сейчас.
ЗЫ. Насколько я догадываюсь, ТС пишет какой то говнокод во враждебной конторе и хочет, чтобы после его увольнения ни одна сволочь не разобралась в его говнокоде.

#18
19:37, 7 июля 2019

UncleMike
> в языке С# это называется делегаты. А вот в языке С++ с этим раньше была полная
> жопа, не знаю как сейчас.
Никогда в языке С++ с этим не было проблем, еще со времен С. В простейшем случае делегатом вполне можно считать обычный указатель на функцию.

#19
20:14, 7 июля 2019

totoro
> Никогда в языке С++ с этим не было проблем, еще со времен С. В простейшем
> случае делегатом вполне можно считать обычный указатель на функцию.
Во-первых, когда я говорю о языке С++, я подразумеваю, что указатель на функцию нельзя применить к конкретному объекту класса как указатель на его функцию-член.
Во-вторых, делегат - это не простой указатель на функцию. Это целый механизм со своими свистелками и перделками, которые собственно и позволяют ему вызывать функцию-член, конкретного экземпляра класса.

#20
(Правка: 21:04) 21:00, 7 июля 2019

UncleMike
> Это целый механизм со своими свистелками и перделками, которые собственно и
> позволяют ему вызывать функцию-член, конкретного экземпляра класса.
В C++ такая возможность имеется достаточно давно. Вы конкретизируйте проблему - чего конкретно не хватает. Обсудим.

Upd.
И да, функция-член это все та же Си-функция, за тем исключением, что у нее присутствует дополнительный неявный аргумент.

#21
2:59, 8 июля 2019

totoro
Вы сами то пробовали в С++ вызывать функцию-член не через ее имя, а через указатель... хоть раз...?

#22
4:13, 8 июля 2019

Можно, но зачем?

#23
9:23, 8 июля 2019

UncleMike
> Вы сами то пробовали в С++ вызывать функцию-член не через ее имя, а через
> указатель... хоть раз...?
Слова человека, который не осилил операторы .*() и ->*()

#24
9:32, 8 июля 2019

pahaa
> Слова человека, который не осилил операторы .*() и ->*()
Я прекрасно знал все эти операторы, но они не работали внутри классов с функциями-членами (не пропускал компилятор).  Извините, это было правда 10 лет назад, когда я работал на С++, (на чистом С++, а не дот.нет) . Ведь у С++ в то время не было механизма типа делегатов. В современном стандарте С++ возможно уже что-то подобное появилось.

#25
12:39, 8 июля 2019

UncleMike
не позорься лучше, если ты не знаешь основ языка то лучше вообще промолчать и не спорить на эту тему. Потому как тебе уже ответили:

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

но ты продолжаешь утверждать что этого не было раньше.
В самой примитивной форме это выглядит так:
https://ideone.com/XLv6DQ
#26
12:39, 8 июля 2019

UncleMike
> вызывать функцию-член не через ее имя, а через указатель... хоть раз...?
std::bind же.

#27
1:11, 9 июля 2019

UncleMike
> Я прекрасно знал все эти операторы, но они не работали внутри классов с
> функциями-членами
Оператор вызова функции-члена класса не работал с функциями-членами класса? Вот так невезуха!..

#28
(Правка: 4:12) 4:09, 9 июля 2019

totoro
> И да, функция-член это все та же Си-функция, за тем исключением, что у нее
> присутствует дополнительный неявный аргумент.

К сожалению сам C++ никак не использует этот принцип де-факто и более того, настаивает что это не так, а реализация может быть другой. Т.е. нет никакого способа по стандарту превратить указатель на метод в указатель на функцию - это невозможно.
Собственно указатель на метод внутри является гипертрофированной неуклюжей и раздутой хренью принцип использования которой доказал со временем, что в таком виде оно неюзабельно и не ложится в основу никакого полезного программистского трюка или паттерна программирования - вместо этой неуклюжей хрени нужны были делегаты, которые сейчас реализованы в стандарте библиотечным классом std::function и всё зачем нужны указатели на методы - это чтобы завернув в жирный лаваш шаблонных прослоек неуклюжий и неюзабельный указатель на метод таки смочь реализовать std::function. В чистом же виде указатели на методы из C++ - неуклюжее говно, а std::function гораздо проще бы реализовывался без лаваша шаблонных прослоек если бы действительно по факту можно было скастить указатель на метод в указатель на функцию - тогда были бы гарантии, что реализация ложится всегда ровно в два указателя - на объект и на функцию в которую указатель на него идёт первым параметром. Но указатели на метод такой гарантии не дают.

#29
12:18, 9 июля 2019

=A=L=X=
потому что указатель на метод это всего лишь смещение относительно адреса самого объекта, теоретически ты можешь грязным хаком получить адрес указателя на функцию конкретного объекта, но на кой оно надо в обычных программах? Принцип разделяй и властвуй тут подходит идеально. И для пользователя std::function вполне удобен, что там внутри под капотом в 99% случаях волновать не должно.

Страницы: 1 2 3 Следующая »
ФлеймФорумПрограммирование