Wzorce, const i brak copy&paste
Ostatnio zmodyfikowano 2009-07-14 11:46
DejaVu |
» 2009-07-13 23:05:55 Nie wiedziałem, że masz takie problemy z programowaniem. #include <iostream> using namespace std;
template < typename T > class Foo { public: void bar( const T * typ ) { if( typ ) { cout <<( * typ ) << endl; } else { cout << "NULL" << endl; } } void bar( const T & typ ) { bar( & typ ); } };
int main() { Foo < int > ble; ble.bar( 123 ); int * zmienna = NULL; ble.bar( zmienna ); int * zmienna2 = new int( 321 ); ble.bar( zmienna2 ); delete zmienna2; return 0; }
|
|
DejaVu |
» 2009-07-13 23:13:21 Twój program wywali się wtedy i tak z hukiem gdy przekażesz wskaźnik NULL'owy dla takiego samego kodu. Jeśli tego nie widzisz to może język D rozwiąże Twój problem lepiej. |
|
DejaVu |
» 2009-07-13 23:18:23 #include <iostream> using namespace std;
template < typename T > class Foo { public: void bar( T * const typ ) { if( typ ) { cout <<( * typ ) << endl; } else { cout << "NULL" << endl; } } void bar( const T & typ ) { bar( const_cast < T *>( & typ ) ); } };
int main() { Foo < int > ble; ble.bar( 123 ); int * zmienna = NULL; ble.bar( zmienna ); int * zmienna2 = new int( 321 ); ble.bar( zmienna2 ); delete zmienna2; return 0; }
A to Ciebie zadowala? |
|
DejaVu |
» 2009-07-13 23:25:54 Szczerze mówiąc to nie rozumiem Ciebie teraz. Masz metodę, która może przyjmować: [li]const T&[/li] [li]const T*[/li] [li]T* const[/li] i mówisz, że żadna Ci nie pasuje pomimo, że realizowane jest Twoje założenie. |
|
pompom |
» 2009-07-13 23:29:10 #include <iostream>
using namespace std;
template < class T > struct X { void foo( T & a ) { cout << "T " << a << endl; } };
template < class T > struct X < T *> { void foo( T * a ) { cout << "T* " << * a << endl; } };
int main() { int a = 23; X < int >().foo( a ); X < int *>().foo( & a ); X < int *>().foo( a ); } |
|
pompom |
» 2009-07-13 23:35:55 Omg. To sobie dodaj const. A na dublowanie kodu nie ma chyba innej rady niż dziedziczenie. |
|
pompom |
» 2009-07-13 23:43:03 Co bzdury? Czego nie rozumiesz? #include <iostream>
using namespace std;
template < class T > struct X { void foo( const T & a ) { cout << "T " << a << endl; } };
template < class T > struct X < T *> { void foo( const T * a ) { cout << "T* " << * a << endl; } };
template < class T > struct Y : public X < T > { int b; Y( int _b ) : b( _b ) { } void bar() { cout << "b " << b << endl; } };
int main() { int a = 23; Y < int >( 1 ).foo( a ); Y < int *>( 1 ).foo( & a ); Y < int >( 1 ).bar(); }
d:/kody $ g++ -o wtf.exe wtf.cpp d:/kody $ ./wtf.exe T 23 T* 23 b 1
|
|
DejaVu |
» 2009-07-13 23:43:57 On napisał bzdury i usunął je - przywrócę je, żebyś wiedział o co chodzi :)
/edit: Już sam zmienił posta ale na sensowniejszego. |
|
« 1 » 2 3 |