Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> почему статические данные, нельзя "брать" из переменных 
V
    Опции темы
bsa
Дата 15.1.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



mes
Base::f()
PM   Вверх
Alek86
Дата 15.1.2008, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(bsa @  15.1.2008,  13:57 Найти цитируемый пост)
Alek86, доступ к статическим функциям возможен через точку или стрелку!

ну, это знаю...
меня больше внуитренние типы расстраивают )

мес, любая невиртуальная функция будет работать, как невиртуальная


--------------------
user posted image    user posted image
PM MAIL   Вверх
Fazil6
Дата 15.1.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(Alek86 @  15.1.2008,  12:35 Найти цитируемый пост)
Fazil6, вроде, наследование никак повлиять не может, ибо статические виртуальные функции невозможны, и, поскольку С++ контекстно-зависимый, то и без того неоднозначностей хватает

наследование влияет таким боком, что может быть неизвестен реальный тип 
PM MAIL   Вверх
Alek86
Дата 15.1.2008, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Fazil6, и что?


--------------------
user posted image    user posted image
PM MAIL   Вверх
archimed7592
Дата 15.1.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alek86 @  15.1.2008,  13:07 Найти цитируемый пост)
Fazil6, а почему?

Потому, что v - это не scope smile.

Возможность писать 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
PM Jabber   Вверх
Alek86
Дата 15.1.2008, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(archimed7592 @  15.1.2008,  17:18 Найти цитируемый пост)
Потому, что v - это не scope

каюсь, не понимаю, что такое scope

ты хочешь сказать, что есть ситуация при которой компилятор не мог бы знать, что ему подставлять заместо v::iterator даже если v - указатель на базовый класс?

как же тогда собираются ключевое слово auto менять?


--------------------
user posted image    user posted image
PM MAIL   Вверх
archimed7592
Дата 15.1.2008, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alek86 @  15.1.2008,  17:26 Найти цитируемый пост)
каюсь, не понимаю, что такое scope

Scope - это область. Область видимости. Область действия... Как хочешь.
Оператор :: применяется для разрешения(resolving) областей и применяться он должен именно к scope, а не к lvalue/rvalue.


Цитата(Alek86 @  15.1.2008,  17:26 Найти цитируемый пост)
ты хочешь сказать, что есть ситуация при которой компилятор не мог бы знать, что ему подставлять заместо v::iterator даже если v - указатель на базовый класс?

Я подумаю над примером.

Цитата(Alek86 @  15.1.2008,  17:26 Найти цитируемый пост)
как же тогда собираются ключевое слово auto менять? 

auto - был(и есть сейчас) storage specifier. В С++09 он будет иметь совсем др. смысл.
Ну а, то что ты хочешь будет реализовываться другим кл. словом:
Код

decltype(v)::const_iterator i = v.cbegin();
// ---
auto i = v.cbegin();
// эквивалентно
decltype(v.cbegin()) i = v.cbegin();


Добавлено через 7 минут и 31 секунду
Ну вот простой пример:
Код

#include <iostream>

struct v
{
    typedef int *iterator;
};

std::ostream &operator <<(std::ostream &os, const v &rhs)
{ return os << "v"; }

template< class V >
void foo(const V &v)
{
    v::iterator i;
    std::cout << v << std::endl;
}


int main()
{
    v V;
    foo(V);
}



--------------------
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
PM Jabber   Вверх
Alek86
Дата 15.1.2008, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Цитата(archimed7592 @  15.1.2008,  17:33 Найти цитируемый пост)
Ну вот простой пример:

наверна я перетрудился, ибо не понял даже, для чего нужно
Код

  v::iterator i;
  std::cout << v << std::endl;

завтра с утра попробую осилить smile


--------------------
user posted image    user posted image
PM MAIL   Вверх
archimed7592
Дата 15.1.2008, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Alek86 @  15.1.2008,  18:05 Найти цитируемый пост)
не понял даже, для чего нужно

Это два примера использования одного и того же имени для упоминания совершенно разных сущностей:
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
PM Jabber   Вверх
Alek86
Дата 15.1.2008, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



не, все-таки давай завтра сутра smile

имхо, тогда мог бы и полегче пример придумать smile
к примеру
Код
i*j;


я же имел в виду, что
Код
v::iterator

(где v- переменная) мог определять единственно возможную сущность (если не в шаблоне)


--------------------
user posted image    user posted image
PM MAIL   Вверх
Lazin
Дата 15.1.2008, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(archimed7592 @  15.1.2008,  17:33 Найти цитируемый пост)
decltype(v)::const_iterator i = v.cbegin();

а я думал это будет называться typeof...
PM MAIL Skype GTalk   Вверх
archimed7592
Дата 15.1.2008, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Lazin @  15.1.2008,  19:25 Найти цитируемый пост)
а я думал это будет называться typeof... 

Это так в Boost.TypeOf его обозвали smile.


Цитата(Alek86 @  15.1.2008,  18:37 Найти цитируемый пост)
мог определять единственно возможную сущность (если не в шаблоне) 

Я тебе привёл пример, где мог и не определять smile.


--------------------
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
PM Jabber   Вверх
warmonger_
Дата 15.1.2008, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 7.7.2007
Где: г. Киев

Репутация: 1
Всего: 3



Цитата(Alek86 @  15.1.2008,  12:05 Найти цитируемый пост)
ибо по смыслу мне нужен итератор именно для типа ЭТОЙ ПЕРЕМЕННОЙ а не для ЭТОГО ТИПА


Код

template <class Container>
void func(Container &c)
{
 typedef typename Container::iterator Itor; // Itor будет для типа ссылки с

....

}


Это сообщение отредактировал(а) warmonger_ - 15.1.2008, 22:14
--------------------
Make everything as simple as possible, but not simpler.Albert Einstein
PM MAIL   Вверх
Alek86
Дата 16.1.2008, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



archimed7592, warmonger_, я знаю, как это можно "обойти"
можно и бьез шаблонов для каждой переменной тайпдефить свой тип (кстати, слыхал, это рекомендуют), и тогда можно безбоязно писать
Код

typedef std::vector<int> VType;
VType v;
VType::iterator;

ибо при изменении типа переменной (в тайпдефе, конечно) ничего менять не придется
но мороки в этими тайпдефами будет много...


вопрос был именно в том, почему такая "проблема" не предусмотрена на уровне языка, который считается объектно-ориентированным
на этот вопрос получил только 2 ответа - от bsa и Fazil6 (с последним я не согласен, но то скорее мои проблемы smile )

Это сообщение отредактировал(а) Alek86 - 16.1.2008, 11:09


--------------------
user posted image    user posted image
PM MAIL   Вверх
Fazil6
Дата 16.1.2008, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1653
Регистрация: 3.5.2006
Где: Минск

Репутация: 35
Всего: 60



Цитата(Alek86 @  16.1.2008,  10:08 Найти цитируемый пост)
вопрос был именно в том, почему такая "проблема" не предусмотрена на уровне языка, который считается объектно-ориентированным

честно, говоря я не вижу проблемы как таковой. Ведь если такой функционал закладывать в язык, то в общем виде компиллятор должен всегда, когда возможное имя в конструкции языка должно восприниматься как тип, то нужно определять его тип и использовать как тип. Т.е. если предполагать наличие такой возможности в языке то конструкция
Код

int x = 0;
x y = 100;  // вполне законное определение переменной типа int


Вам это надо?
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0637 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.