
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.75] |
![]() |
|
Страницы: (8) 1 2 [3] 4 5 ... 7 8 все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
А сам Racket уже научились использовать в практических целях? |
Сообщ.
#32
,
|
|
|
А почему все время спрашиваешь, не уверен? ![]() |
![]() |
Сообщ.
#33
,
|
|
Цитата IL_Agent @ Написать предикат, который проверяет тип аргумента, во многих языках можно. Вызывай его вначале любой функции для проверки аргументов - вот тебе и контракт ![]() дык это динамическая типизация =) когда такое будет в статике? =) |
![]() |
Сообщ.
#34
,
|
|
http://antilamer.livejournal.com/366341.html?thread=3307013#t3307013
|
Сообщ.
#35
,
|
|
|
Ну, там правильно пишут: непонятно на кой он.
Добавлено korvin, а в статике нельзя определить тип во время исполнения что ли? |
![]() |
Сообщ.
#36
,
|
|
Цитата MyNameIsIgor @ korvin, а в статике нельзя определить тип во время исполнения что ли? можно, только это не статика будет =) |
Сообщ.
#37
,
|
|
|
Цитата korvin @ можно, только это не статика будет =) Нуууу... Имелась то ввиду, так скажем, типизация по умолчанию. А так и в сисярпе есть dynamic ![]() |
Сообщ.
#38
,
|
|
|
Цитата korvin @ дык это динамическая типизация =) когда такое будет в статике? =) Динамическая типизация - это когда тип переменной определяется во время выполнения, а не задаётся при написании или выводится при компиляции. Так ? А проверить тип, а затем выполнить определённые действия в зависимости от него, можно и при статической типизации. См. dynamic_cast, например. |
Сообщ.
#39
,
|
|
|
Цитата korvin @ Блин, есть уже. Хз сколько раз показывал.дык это динамическая типизация =) когда такое будет в статике? =) ![]() ![]() template<typename T> void fun(T p); template<> void fun<int>(int p) { std::cout << "реализация для int" << std::endl; } template<> void fun<float>(float p) { std::cout << "реализация для float" << std::endl; } template<> void fun<std::string>(std::string p) { static_assert(true, "реализация для строк запрещена");//ошибка на этапе компиляции } template<typename T> void fun(T p) { std::cout << "реализация для всего остального" << std::endl; } |
Сообщ.
#40
,
|
|
|
Цитата Повстанець @ Блин, есть уже. Хз сколько раз показывал. А для int, который > 0 ? ![]() |
Сообщ.
#41
,
|
|
|
Цитата IL_Agent @ А для int, который > 0 ? ![]() ![]() ![]() template<int i> void fun() { static_assert(i > 0, "только больше нуля");//скомпилится только при i>0 } |
![]() |
Сообщ.
#42
,
|
|
Цитата Повстанець @ Цитата IL_Agent @ А для int, который > 0 ? ![]() ![]() ![]() template<int i> void fun() { static_assert(i > 0, "только больше нуля");//скомпилится только при i>0 } и где здесь выделение типа? =) ![]() ![]() #include <iostream> template<int i> void fun () { static_assert( i > 0, "natural" ); std::cout << "Natural: " << i << std::endl; } template<int i> void fun () { std::cout << "Integer: " << i << std::endl; } int main () { } фиг с ней с ошибкой про ассерт, но переопределение шаблона -- вот, что важно: ![]() ![]() [ ~/devel/c++ ] g++ test.cpp test.cpp: В функции «void fun()»: test.cpp:5:34: ошибка: «static_assert» не имеет аргументов, зависящих от параметра-шаблона, поэтому должна быть доступна декларация «static_assert» [-fpermissive] test.cpp:5:34: замечание: (с ключом «-fpermissive», G++ примет данный код, но разрешение использовать недекларированные имена будет отменено в дальнейших версиях) test.cpp: At global scope: test.cpp:10:11: ошибка: redefinition of «template<int i> void fun()» test.cpp:4:11: ошибка: «template<int i> void fun()» previously declared here |
Сообщ.
#43
,
|
|
|
Цитата korvin @ фиг с ней с ошибкой про ассерт, но переопределение шаблона -- вот, что важно: Не, это не важно. Повстанець написал пример просто шаблонной функции, которая компилируется только в случае, если её аргумент больше нуля. Если нужно выбрать реализацию, то можно так. |
![]() |
Сообщ.
#44
,
|
|
Цитата MyNameIsIgor @ Не, это не важно. Повстанець написал пример просто шаблонной функции, которая компилируется только в случае, если её аргумент больше нуля. Если нужно выбрать реализацию, то можно так. ой ли? http://ideone.com/h9xG7 |
Сообщ.
#45
,
|
|
|
Цитата И где тут статика? fun<i>(); |