|
|
|
Использование значений по умолчанию
|
|||
|---|---|---|---|
|
#18+
Всем доброго времени суток! Заранее прошу прощение за возможно дурацкий вопрос: в C++ можно объявить прототип с указанием значений по умолчанию: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Вопрос такой, как вызвать функцию так, что бы оставить значение по умолчанию для параметра (параметров), стоящего в середине списка, а не в конце? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2005, 11:53 |
|
||
|
Использование значений по умолчанию
|
|||
|---|---|---|---|
|
#18+
Насколько мне исзестно - никак. --- С уважением, Dubrov. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2005, 12:39 |
|
||
|
Использование значений по умолчанию
|
|||
|---|---|---|---|
|
#18+
DubrovНасколько мне исзестно - никак. --- С уважением, Dubrov. Да именно никак Зато в MSSQL можно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2005, 14:06 |
|
||
|
Использование значений по умолчанию
|
|||
|---|---|---|---|
|
#18+
В Visual Basic тоже можно :) От этого не легче :( Жаль, очень удобная штука (была бы) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2005, 14:16 |
|
||
|
Использование значений по умолчанию
|
|||
|---|---|---|---|
|
#18+
А такой вариант не устроит? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2005, 14:48 |
|
||
|
Использование значений по умолчанию
|
|||
|---|---|---|---|
|
#18+
Sr. MelifaroА такой вариант не устроит? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Устроит, но не всегда (причем далеко не всегда). А если мне надо передать произвольное число? Для указателей можно использовать NULL, а вот для других типов - увы. Так что извините, что есть, то есть. LKOВ Visual Basic тоже можно :) В VB, если мне память не изменяет, можно даже порядок аргументов не соблюдать если указывать самому какому формальному параметру какое фактическое значение присваивать (тоже неплохая штука). Причем для реализации такой фичи разработчикам языка и особенно напрягаться не нужно было, но ... что есть, то есть. И еще, извините за опечатку. DubrovНасколько мне исзестно - никак.Понятно, что исзестно == известно. Sorry. :-) --- С уважением, Dubrov. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2005, 15:34 |
|
||
|
Использование значений по умолчанию
|
|||
|---|---|---|---|
|
#18+
Sr. MelifaroА такой вариант не устроит? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Ну да, это первое и наиболее простое решение. Вопрос лишь в том, какое число использовать как флаг, вместо которого подставлять умолчания (это если задача не предполагает использование всего диапазона значений). В Вашем примере это "0", но иногда и его требуется передавать в кач. аргумента... Так же можно использовать перегрузку ф-ий, но опять же далеко не во всех случаях, лишь в тех, когда параметров с умолчаниями не больше трех (иначе слишком много вариантов - себе дороже) и у них различные типы данных... Можно передавать массивы... Хоть и говорят "если бы, да кабы...", но такой вариант как в VB Код: plaintext 1. был бы куда удобнее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 10:48 |
|
||
|
Использование значений по умолчанию
|
|||
|---|---|---|---|
|
#18+
Не советую часто использовать аргументы по умолчанию. Только если они действительно нужны. В остальных случаях лучше перегружать функцию. Так проще надежней и читабельней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 11:02 |
|
||
|
Использование значений по умолчанию
|
|||
|---|---|---|---|
|
#18+
LKOНу да, это первое и наиболее простое решение. Вопрос лишь в том, какое число использовать как флаг, вместо которого подставлять умолчания (это если задача не предполагает использование всего диапазона значений). В Вашем примере это "0", но иногда и его требуется передавать в кач. аргумента... есть еще MAX_INT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 11:11 |
|
||
|
Использование значений по умолчанию
|
|||
|---|---|---|---|
|
#18+
miniСЛОН LKOНу да, это первое и наиболее простое решение. Вопрос лишь в том, какое число использовать как флаг, вместо которого подставлять умолчания (это если задача не предполагает использование всего диапазона значений). В Вашем примере это "0", но иногда и его требуется передавать в кач. аргумента... есть еще MAX_INT А MAX_INT тоже число, ничем не лучше и ничем не хуже чем любое другое. Тем более что в любом случае придется что-то передавать, а смысл аргумента по умолчанию в том и заключается что не надо ничего помнить, а просто его не указывать. Есть еще один вариант. Можно вместо, например WORD передавать DWORD. (Что-то подобное используется в ф-циях ввода/вывода C, где getc() возвращает символ, но в int виде, старший байт всегда равен 0 за исключением символа EOF). Собственно говоря смысл в том, что в функцию передаются наиболее важные параметры, а при необходимости менее важные значения уточняются . Таким образом аргументы функции нужно располагать в порядке убывания их важности. --- С уважением, Dubrov. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 12:28 |
|
||
|
Использование значений по умолчанию
|
|||
|---|---|---|---|
|
#18+
LKO Вопрос такой, как вызвать функцию так, что бы оставить значение по умолчанию для параметра (параметров), стоящего в середине списка, а не в конце? Вариант 1 SomeFunc(1, 10); Вариант 2 - использовать overloading ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 18:19 |
|
||
|
Использование значений по умолчанию
|
|||
|---|---|---|---|
|
#18+
А еще можно переставить местами параметры ________________________________________________________ Глюк - это высокоорганизованная система не поддающихся определению частиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2005, 18:28 |
|
||
|
Использование значений по умолчанию
|
|||
|---|---|---|---|
|
#18+
Самое простое и интуитивно понятное решение это использовать враппер над функцией, правда, он несколько громоздкий для такой простой фичи, но достигает желаемого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 12:32 |
|
||
|
Использование значений по умолчанию
|
|||
|---|---|---|---|
|
#18+
лучше уж тогда boost::bind - тут возможны любые комбинации. Но ни в коем разе не надо мудрить со значениями по умолчанию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 18:32 |
|
||
|
Использование значений по умолчанию
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 18:38 |
|
||
|
Использование значений по умолчанию
|
|||
|---|---|---|---|
|
#18+
Я это использовал уже чтобы написать шаблон Охранника(scope guard), причем сделал это на базе boost::tuple, чтобы не пложить кучу локальных переменных. Можно было бы применить канеш шаблон Observer, т.е. boost::signals( scope_connection - представьте себе делегат Шарпа, но завязанный на области видимости ), но там нельзя управлять исключениями внутри вызываемых функций и он потоково небезопасен. Поэтому я выбрал boost::tuple + boost::function + boost::bind. Вешаешь вызов любой функции, с любой сигнатурой, и они вызываются при выходе из области видимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2005, 18:43 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32907900&tid=2033736]: |
0ms |
get settings: |
4ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
620ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 922ms |

| 0 / 0 |
