typeof в Visual C++
От: topkay  
Дата: 07.08.05 12:47
Оценка: -1 :))) :)
Почему компилятор (Microsoft Visual Studio .NET) выдает ошибку:

"typeof — undeclared identifier"

nри коплиляции например такого кода (консольное приложение Win32)


#include <algorithm> 
#include <cstdlib> 
#include <cmath> 
#include <string> 
#include <vector> 
#include <cctype> 
#include <iostream> 
#include <cstdio> 
#include <sstream> 
using namespace std; 

#define FOREACH(it,c) for(typeof((c).begin()) it=(c).begin();it!=(c).end();++it) 
typedef long long LL; 

void main()
{
    string s="abcd"; 
    FOREACH(it,s) 
    { 
        char c = *it; 
    } 
}



Вопрос наверняка прост, но ответа в Мануале я не нашел.

Спасибо заранее за ответ.
Re: typeof в Visual C++
От: VladGal  
Дата: 07.08.05 13:33
Оценка:
Здравствуйте, topkay, Вы писали:

T>Почему компилятор (Microsoft Visual Studio .NET) выдает ошибку:


T> "typeof — undeclared identifier"


T>nри коплиляции например такого кода (консольное приложение Win32)


Ответ прост: такого ключевого слова в C++ нет (в managed С++ вроде тоже)
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[2]: typeof в Visual C++
От: Nazik Россия  
Дата: 07.08.05 16:43
Оценка: -1
ага, оператор из области JavaScript

Здравствуйте, VladGal, Вы писали:

VG>Здравствуйте, topkay, Вы писали:


T>>Почему компилятор (Microsoft Visual Studio .NET) выдает ошибку:


T>> "typeof — undeclared identifier"


T>>nри коплиляции например такого кода (консольное приложение Win32)


VG>Ответ прост: такого ключевого слова в C++ нет (в managed С++ вроде тоже)
Re: typeof в Visual C++
От: CrystaX Россия https://crystax.me/
Дата: 07.08.05 19:35
Оценка:
Здравствуйте, topkay, Вы писали:

T>Вопрос наверняка прост, но ответа в Мануале я не нашел.


T>Спасибо заранее за ответ.


Как уже сказали, ключевого слова typeof нет в текущем стандарте C++. Возможно (да практически наверняка), оно будет включено в следующую версию.
Если хочется обязательно typeof получить, то можно использовать typeof с регистрацией типов. Поищи по форуму, довольно часто упоминалось.

Пока же практическое решение такое (если речь идет о стандартных контейнерах):

template <typename Container, typename Functor>
void foreach(Container const &s, Functor f)
{
    for(typename Container::const_iterator it = s.begin(), lim = s.end(); it != lim; ++it)
        f(*it);
}
...
void foo(char c)
{
    // Do something
}
...
string s = "abcd";
foreach(s, &foo);


Или используй std::for_each
... << RSDN@Home 1.1.4 stable rev. 510>>
Re: typeof в Visual C++
От: Аноним  
Дата: 07.08.05 21:09
Оценка:
http://www.rsdn.ru/Forum/Message.aspx?mid=436108
Автор: folk
Дата: 07.11.03


Можно посмотреть ешо и бустовскую реализацию.. обещают в 1.33 но можно и сечас найти реализацию.. кстати тама упоминаеться про Typeof
Re: typeof в Visual C++
От: Chez Россия  
Дата: 08.08.05 06:37
Оценка:
Здравствуйте, topkay, Вы писали:

T>Почему компилятор (Microsoft Visual Studio .NET) выдает ошибку:

T> "typeof — undeclared identifier"

Посмотрите про for_each здесь:
[ANN] Conditional Love: FOREACH Redux
Автор: korzhik
Дата: 21.02.05

Chez, ICQ#161095094

Posted via:RSDN@Home;version:1.1.3;muzikstamp:silent

Re[2]: typeof в Visual C++
От: Pavel Chikulaev Россия  
Дата: 08.08.05 07:45
Оценка: 25 (3)
"CrystaX" wrote...
> Как уже сказали, ключевого слова typeof нет в текущем стандарте C++. Возможно
> (да практически наверняка), оно будет включено в следующую версию.
typeof не будет!!! Будет decltype и auto. См сюда:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1705.pdf
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1721.pdf

--
Pavel Chikulaev
Posted via RSDN NNTP Server 1.9
Re[3]: typeof в Visual C++
От: Кодёнок  
Дата: 09.08.05 11:49
Оценка:
Здравствуйте, Pavel Chikulaev, Вы писали:

PC>"CrystaX" wrote...

>> Как уже сказали, ключевого слова typeof нет в текущем стандарте C++. Возможно
>> (да практически наверняка), оно будет включено в следующую версию.
PC>typeof не будет!!! Будет decltype и auto. См сюда:
PC>http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1705.pdf
PC>http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1721.pdf

Хе-хе

2. Deducing the type of a variable from the type of its initializer:
template <class A, class B>
void foo(const A& a, const B& b) {
auto tmp = a * b;
...


Помните недавнее обсуждение
Автор: Кодёнок
Дата: 05.07.05
, где я предложил "var foo = GetFoo()". Это оно И ведь на самом деле, почти все случаи нужды в typeof эта конструкция покрывает.
Re[4]: typeof в Visual C++
От: CrystaX Россия https://crystax.me/
Дата: 09.08.05 11:55
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>Помните недавнее обсуждение
Автор: Кодёнок
Дата: 05.07.05
, где я предложил "var foo = GetFoo()". Это оно И ведь на самом деле, почти все случаи нужды в typeof эта конструкция покрывает.


Да, это оно самое. На самом деле предложение это очень давнее, о нем еще в "C++ Templates: The Complete Guide" говорилось. Ну а предлагаемый decltype, как я понял, это тот же typeof, только с другим именем. Непонятно только зачем.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[5]: typeof в Visual C++
От: Lorenzo_LAMAS  
Дата: 09.08.05 12:11
Оценка:
CX>Да, это оно самое. На самом деле предложение это очень давнее, о нем еще в "C++ Templates: The Complete Guide" говорилось. Ну а предлагаемый decltype, как я понял, это тот же typeof, только с другим именем. Непонятно только зачем.

http://groups.google.ru/group/comp.std.c++/browse_thread/thread/5e6073ea6499a878/45b27f564da69bcc?q=typeof+proposal&amp;rnum=2&amp;hl=ru#45b27f564da69bcc
Of course, the code must be complete enough to compile and link.
Re[6]: typeof в Visual C++
От: CrystaX Россия https://crystax.me/
Дата: 09.08.05 12:19
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

CX>>Да, это оно самое. На самом деле предложение это очень давнее, о нем еще в "C++ Templates: The Complete Guide" говорилось. Ну а предлагаемый decltype, как я понял, это тот же typeof, только с другим именем. Непонятно только зачем.


L_L>http://groups.google.ru/group/comp.std.c++/browse_thread/thread/5e6073ea6499a878/45b27f564da69bcc?q=typeof+proposal&amp;rnum=2&amp;hl=ru#45b27f564da69bcc


Насколько я понял, вся аргументация сводится к тому, что компиляторы, в которых typeof реализован (GCC и EDG), при передаче ему ссылочного типа возвращают тип исходный (не ссылочный). А затем делается вывод, что поэтому нужно назвать это слово не typeof-ом, а decltype. Логика все равно не улавливается...
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[7]: typeof в Visual C++
От: Pavel Chikulaev Россия  
Дата: 09.08.05 19:32
Оценка:
"CrystaX" wrote...
> Здравствуйте, Lorenzo_LAMAS, Вы писали:
>
> CX>>Да, это оно самое. На самом деле предложение это очень давнее, о нем еще в
> "C++ Templates: The Complete Guide" говорилось. Ну а предлагаемый decltype,
> как я понял, это тот же typeof, только с другим именем. Непонятно только
> зачем.
>
> L_L>http://groups.google.ru/group/comp.std.c++/browse_thread/thread/5e6073ea6499a878/45b27f564da69bcc?q=typeof+proposal&amp;rnum=2&amp;hl=ru#45b27f564da69bcc
>
> Насколько я понял, вся аргументация сводится к тому, что компиляторы, в
> которых typeof реализован (GCC и EDG), при передаче ему ссылочного типа
> возвращают тип исходный (не ссылочный). А затем делается вывод, что поэтому
> нужно назвать это слово не typeof-ом, а decltype. Логика все равно не
> улавливается...
decltype — "полный" тип
typeof — "не полный" тип (по крайней мере бустовский и вроде гисисишный)
auto — "не полный" тип

--
Pavel Chikulaev
Posted via RSDN NNTP Server 1.9
Re[4]: typeof в Visual C++
От: Pavel Chikulaev Россия  
Дата: 09.08.05 19:35
Оценка:
"Кодёнок" wrote...
> Помните недавнее обсуждение
Автор: Кодёнок
Дата: 05.07.05
,

> где я предложил "var foo = GetFoo()". Это оно И ведь на самом деле, почти
> все случаи нужды в typeof эта конструкция покрывает.
А я сам expression templates придумал, typeof c регистрацией, move semantics,
template bloat, но какая разница Это все придумали до нас и нечего
присваивать соавторство идеи Надо просто пользоваться.

--
Pavel Chikulaev
Posted via RSDN NNTP Server 1.9
Re[8]: typeof в Visual C++
От: CrystaX Россия https://crystax.me/
Дата: 09.08.05 20:07
Оценка:
Здравствуйте, Pavel Chikulaev, Вы писали:

PC>decltype — "полный" тип

PC>typeof — "не полный" тип (по крайней мере бустовский и вроде гисисишный)
PC>auto — "не полный" тип

О чем и говорю. Так как существующие реализации typeof выдают неполный тип, давайте назовем его (в отместку, что ли?) decltype.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[5]: typeof в Visual C++
От: Кодёнок  
Дата: 10.08.05 05:52
Оценка:
Здравствуйте, Pavel Chikulaev, Вы писали:

>> Помните недавнее обсуждение
Автор: Кодёнок
Дата: 05.07.05
,

>> где я предложил "var foo = GetFoo()". Это оно И ведь на самом деле, почти
>> все случаи нужды в typeof эта конструкция покрывает.
PC>А я сам expression templates придумал, typeof c регистрацией, move semantics,
PC>template bloat, но какая разница Это все придумали до нас и нечего
PC>присваивать соавторство идеи Надо просто пользоваться.

Да я бы рад уже воспользоваться, только всё не дождусь
Re[9]: typeof в Visual C++
От: Кодёнок  
Дата: 10.08.05 05:54
Оценка:
Здравствуйте, CrystaX, Вы писали:

PC>>decltype — "полный" тип

PC>>typeof — "не полный" тип (по крайней мере бустовский и вроде гисисишный)
PC>>auto — "не полный" тип

CX>О чем и говорю. Так как существующие реализации typeof выдают неполный тип, давайте назовем его (в отместку, что ли?) decltype.


А кто-нибудь может привести пример, когда позарез надо сохранять ссылочный тип?
Re[10]: typeof в Visual C++
От: CrystaX Россия https://crystax.me/
Дата: 10.08.05 10:25
Оценка:
Здравствуйте, Кодёнок, Вы писали:

CX>>О чем и говорю. Так как существующие реализации typeof выдают неполный тип, давайте назовем его (в отместку, что ли?) decltype.


Кё>А кто-нибудь может привести пример, когда позарез надо сохранять ссылочный тип?


Навскидку не скажу, но знать точный тип никак не хуже, чем знать неполный. В конце концов, из полного можно всегда вывести неполный, но не наоборот.
... << RSDN@Home 1.1.4 stable rev. 510>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.