![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
вот в таком коде
если раскомментировать закомментированные строки, прога не компилится как я понимаю. так обращаться к статикам нельзя по стандарту. но почему. не понимаю. может кто знает? |
|||
|
||||
| _stranger_ |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 3.10.2006 Где: город-герой Киев Репутация: 2 Всего: 2 |
|
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
вообще можно обращаться к статическим переменным (функциям) через операторы . и ->, но это лучше не делать так как код будет труднее читать
Это сообщение отредактировал(а) Lazin - 15.1.2008, 11:57 |
|||
|
||||
| NiJazz |
|
|||
![]() Jazz coder ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2286 Регистрация: 10.8.2003 Где: Москва Репутация: 1 Всего: 23 |
Статические переменные и функции класса можно рассматривать как обычные переменные и функции в пространстве имён, но имеющие доступ к приватным членам класса.
Пример:
|
|||
|
||||
| Alek86 |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
мне оно не нравится потому, как если есть
то я не могу написать
я знаю, что можно std::vector<int> затайпдефить, но все равно это уже не то... ибо по смыслу мне нужен итератор именно для типа ЭТОЙ ПЕРЕМЕННОЙ а не для ЭТОГО ТИПА Это сообщение отредактировал(а) Alek86 - 15.1.2008, 12:12 |
||||
|
|||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
вроде-бы в следующей версии стандарта можно будет писать
а компилятор немного подумает и определит тип переменной i |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
да вот, ждем-с
правда, все равно неясно почему написать так (как в вопросе) нельзя... Это сообщение отредактировал(а) Alek86 - 15.1.2008, 12:48 |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
||||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
Fazil6, а почему?
(меня как раз именно это и интересует) |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Alek86, считай недоработка языка. Идеального ничего не бывает.
|
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
ну видимо потому, что есть точка и стрелка для доступа к членам и нафига здесь еще и :: , а выковыривания типа из объекта вроде
это совсем уж другая задача. Ведь в объекте нет описания этого типа (я так думаю). Т.е компиллятору нужно будет определить, что это за тип такой объекта v и уже из него добывать, а тут еще наследование может под ногами путаться, и тем более если позволить добывать таким оператором переменные из объектов, то получается неоднозначность между тем чего мы хотим (тип или переменную, typename вроде тока в шаблонах можно применять) |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
я больше мнения bsa придерживаюсь (ну, или может исторические причины)
Fazil6, вроде, наследование никак повлиять не может, ибо статические виртуальные функции невозможны, и, поскольку С++ контекстно-зависимый, то и без того неоднозначностей хватает... В шаблонах typename из-за того, что не всегда виден контекст.... |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Alek86, доступ к статическим функциям возможен через точку или стрелку!
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
mes
Base::f() |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
||||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
||||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
Fazil6, и что?
|
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Потому, что v - это не scope Возможность писать v.static_mem была сделана лишь для шаблонов. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
каюсь, не понимаю, что такое scope ты хочешь сказать, что есть ситуация при которой компилятор не мог бы знать, что ему подставлять заместо v::iterator даже если v - указатель на базовый класс? как же тогда собираются ключевое слово auto менять? |
|||
|
||||
| archimed7592 |
|
||||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Scope - это область. Область видимости. Область действия... Как хочешь. Оператор :: применяется для разрешения(resolving) областей и применяться он должен именно к scope, а не к lvalue/rvalue.
Я подумаю над примером. auto - был(и есть сейчас) storage specifier. В С++09 он будет иметь совсем др. смысл. Ну а, то что ты хочешь будет реализовываться другим кл. словом:
Добавлено через 7 минут и 31 секунду Ну вот простой пример:
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||||
|
|||||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
наверна я перетрудился, ибо не понял даже, для чего нужно
завтра с утра попробую осилить |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Это два примера использования одного и того же имени для упоминания совершенно разных сущностей: 1. v - тип, определённый in global scope. 2. v - локальная переменная(аргумент типа V, который в свою очередь является ::v). Выбор сущности в данном случае зависит от способа использования(:: vs <<). -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| Alek86 |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
не, все-таки давай завтра сутра
имхо, тогда мог бы и полегче пример придумать к примеру
я же имел в виду, что
(где v- переменная) мог определять единственно возможную сущность (если не в шаблоне) |
||||
|
|||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
а я думал это будет называться typeof... |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Это так в Boost.TypeOf его обозвали Я тебе привёл пример, где мог и не определять -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| warmonger_ |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 7.7.2007 Где: г. Киев Репутация: 1 Всего: 3 |
Это сообщение отредактировал(а) warmonger_ - 15.1.2008, 22:14 --------------------
Make everything as simple as possible, but not simpler.Albert Einstein |
||||
|
|||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
archimed7592, warmonger_, я знаю, как это можно "обойти"
можно и бьез шаблонов для каждой переменной тайпдефить свой тип (кстати, слыхал, это рекомендуют), и тогда можно безбоязно писать
ибо при изменении типа переменной (в тайпдефе, конечно) ничего менять не придется но мороки в этими тайпдефами будет много... вопрос был именно в том, почему такая "проблема" не предусмотрена на уровне языка, который считается объектно-ориентированным на этот вопрос получил только 2 ответа - от bsa и Fazil6 (с последним я не согласен, но то скорее мои проблемы Это сообщение отредактировал(а) Alek86 - 16.1.2008, 11:09 |
|||
|
||||
| Fazil6 |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
честно, говоря я не вижу проблемы как таковой. Ведь если такой функционал закладывать в язык, то в общем виде компиллятор должен всегда, когда возможное имя в конструкции языка должно восприниматься как тип, то нужно определять его тип и использовать как тип. Т.е. если предполагать наличие такой возможности в языке то конструкция
Вам это надо? |
||||
|
|||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
вопрос и не в этом был
не "почему переменные не могут восприниматься как типы", а "почему внутренние типы классов можно получить только у типов, и нельзя у переменных этого типа". Статики сами собой как-то приклеились... |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Alek86
Представь, что можно получит доступ к типу через точку, тогда что будет значить запись:
|
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
bsa, логично
ну и последняя в этом отношении непонятка - почему оператор :: используется только для типов? |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
для типов и пространств имен
Добавлено через 1 минуту и 6 секунд по моему это вполне логично, если есть оператор . и -> для переменных, то должен быть соответствующий оператор и для типов |
|||
|
||||
| warmonger_ |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 7.7.2007 Где: г. Киев Репутация: 1 Всего: 3 |
Можно было бы конечно сделать:
а без typename объявление переменно. Но мне кажется, что это бред. Думаю, что нечего не нужно выдумывать. Меня устраивает так, как оно есть. --------------------
Make everything as simple as possible, but not simpler.Albert Einstein |
||||
|
|||||
| Fazil6 |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
я понимаю в чем твой вопрос. Ты не совсем понимаешь, что я имею в виду
потому что внутренние типы в объкте отсутствуют и получить их можно из типа объекта, а не самого объекта и отсюда и следует необходимость воспринимать объект как тип и последующая белиберда приведенная мной в примере.
хм... А применительно к объекту он какой возможный функционал может реализовывать, если учесть, что получение встроенного типа из объекта нафиг не нужно и это логично? |
||||
|
|||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
Жаль, но я не вижу, почему из того, что из объекта можно будет узнать его внутренние типы, следует, что объект обязан восприниматься компилятором как тип. Скорее проблема в генах (моих) если остальным это так очевидно, потому предлагаю тему закрыть |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |