Здравствуйте, VladGal, Вы писали:
VG>Здравствуйте, topkay, Вы писали:
T>>Почему компилятор (Microsoft Visual Studio .NET) выдает ошибку:
T>> "typeof — undeclared identifier"
T>>nри коплиляции например такого кода (консольное приложение Win32)
VG>Ответ прост: такого ключевого слова в C++ нет (в managed С++ вроде тоже)
Здравствуйте, 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);
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;
...
, где я предложил "var foo = GetFoo()". Это оно И ведь на самом деле, почти все случаи нужды в typeof эта конструкция покрывает.
Да, это оно самое. На самом деле предложение это очень давнее, о нем еще в "C++ Templates: The Complete Guide" говорилось. Ну а предлагаемый decltype, как я понял, это тот же typeof, только с другим именем. Непонятно только зачем.
CX>Да, это оно самое. На самом деле предложение это очень давнее, о нем еще в "C++ Templates: The Complete Guide" говорилось. Ну а предлагаемый decltype, как я понял, это тот же typeof, только с другим именем. Непонятно только зачем.
Насколько я понял, вся аргументация сводится к тому, что компиляторы, в которых typeof реализован (GCC и EDG), при передаче ему ссылочного типа возвращают тип исходный (не ссылочный). А затем делается вывод, что поэтому нужно назвать это слово не typeof-ом, а decltype. Логика все равно не улавливается...
"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&rnum=2&hl=ru#45b27f564da69bcc > > Насколько я понял, вся аргументация сводится к тому, что компиляторы, в > которых typeof реализован (GCC и EDG), при передаче ему ссылочного типа > возвращают тип исходный (не ссылочный). А затем делается вывод, что поэтому > нужно назвать это слово не typeof-ом, а decltype. Логика все равно не > улавливается...
decltype — "полный" тип
typeof — "не полный" тип (по крайней мере бустовский и вроде гисисишный)
auto — "не полный" тип
, > где я предложил "var foo = GetFoo()". Это оно И ведь на самом деле, почти > все случаи нужды в typeof эта конструкция покрывает.
А я сам expression templates придумал, typeof c регистрацией, move semantics,
template bloat, но какая разница Это все придумали до нас и нечего
присваивать соавторство идеи Надо просто пользоваться.
Здравствуйте, Pavel Chikulaev, Вы писали:
PC>decltype — "полный" тип PC>typeof — "не полный" тип (по крайней мере бустовский и вроде гисисишный) PC>auto — "не полный" тип
О чем и говорю. Так как существующие реализации typeof выдают неполный тип, давайте назовем его (в отместку, что ли?) decltype.
, >> где я предложил "var foo = GetFoo()". Это оно И ведь на самом деле, почти >> все случаи нужды в typeof эта конструкция покрывает. PC>А я сам expression templates придумал, typeof c регистрацией, move semantics, PC>template bloat, но какая разница Это все придумали до нас и нечего PC>присваивать соавторство идеи Надо просто пользоваться.
Да я бы рад уже воспользоваться, только всё не дождусь
Здравствуйте, CrystaX, Вы писали:
PC>>decltype — "полный" тип PC>>typeof — "не полный" тип (по крайней мере бустовский и вроде гисисишный) PC>>auto — "не полный" тип
CX>О чем и говорю. Так как существующие реализации typeof выдают неполный тип, давайте назовем его (в отместку, что ли?) decltype.
А кто-нибудь может привести пример, когда позарез надо сохранять ссылочный тип?
Здравствуйте, Кодёнок, Вы писали:
CX>>О чем и говорю. Так как существующие реализации typeof выдают неполный тип, давайте назовем его (в отместку, что ли?) decltype.
Кё>А кто-нибудь может привести пример, когда позарез надо сохранять ссылочный тип?
Навскидку не скажу, но знать точный тип никак не хуже, чем знать неполный. В конце концов, из полного можно всегда вывести неполный, но не наоборот.