Александреску в свое время вынес мозг тайп листом
из языковых непомню что удивило
Nomad
> - четые абсолютно разных шаблона о_О
Почему-то когда я реализую две шаблонные функции
template <class T> void foo(T){} template<> void foo( char *mas){printf( "pointer");} template<> void foo( char mas[]){printf( "array");}
то компилятор G++ выдаёт ошибку - redefinition of 'void foo(T) [with T = char*]'.
Ещё, кстати, вспомнил, что можно шаблоны явно инстанцировать.
ITALY
> Чем тебя не устраивает
> void ProcessA (int* pVal)
> {
> ++(*pVal);
> }
>
> A a;
> ProcessA (&a.x); // x++
> ??
Это ж для примера. Бывают случаи, в которых польза от фичи более несомненна. Например, для интрузивных контейнеров удобно через него указывать член, который содержит закладку.
Zefick
В студии (7, кажется) напоролся на этот косяк, и не мог передавать в шаблон локальные строки.
1. Перехват исключения в списке инициализации членов класса.
2. Сохранение виртуальности вызова при вызове виртуальной функции по указателю на нее.
3. Надо вспоминать...
ChaoX
> при наличии шаблонного конструктора копирования/оператора
> присваивания при точном соответствии вызывается все равно дефолтовый.
Можно подробней? Дефолтовый -- т.е. определённый для данного типа данных?
Voltt
template <typename T> class Foo { public: template <typename U> Foo(const Foo<U> &src) { cout << "template copy constructor"; } Foo( const Foo &src) { cout << "copy constructor"; } }; ... Foo<int> a; Foo<double> b( a); //Напечатает "template copy constructor" Foo<int> c( a); //Напечатает "copy constructor"
При этом, если ты не объявишь конструктор копирования Foo(const Foo &src), вызовется дефолтный. А это чревато довольно неприятными багами и длительной медитацией в дебаггере.
Очень приятным открытием для меня был тот факт, что полное описание языка C занимает 10 сраниц печатного текста.
Megabyte-Ceercop
завтра покимон выйдет из бани и порвет тебя аргументом что в С около 25 ключевых слов...
Megabyte-Ceercop
> Очень приятным открытием для меня был тот факт, что полное описание языка C
> занимает 10 сраниц печатного текста.
10 страниц?
Полное описание языка Си можно разместить на ладони человека. Странно, что такие татуировки не делают.
Самым удивительным в Си является тот факт, что на нем пишут все меньше и меньше. Удивляюсь этому по три раза на дню.
Ghost2
> Также, открытием была возможность изменять тип возвращаемого значения
> виртуального метода(при условии что новый тип является наследником старого).
Не получается.
#include <iostream>
using namespace std;
class A
{
public:
virtual A *get () = 0;
virtual void out() {cout << "A::out()" << endl;}
};
class B : public A
{
public:
B *get () {return this;}
void out(){cout << "B::out" << endl;}
};
int main (int argc, char** argv)
{
A *a = new B;
B *b = a->get();
}компилятор выдает: error: invalid conversion from `A*' to `B*'
Pokimon
найди мне такое описание...
Мое небольшое удивление вызвал MySQL, который дату возвращал в формате числа как 20100618221532 (ГГГГММДДЧЧММСС). Я почему-то считал, что он должен по умолчанию возвращать timestamp
"Очень приятным открытием для меня был тот факт, что полное описание языка C занимает 10 сраниц печатного текста."
http://www.nirvani.net.nyud.net:8090/docs/ansi_c.pdf
-> 550 страниц
ciber_man
> -> 550 страниц
Гг. Опять Покимона выпороли.
Тема в архиве.