Biżuteria


From: Sebastian Kaliszewski <s get.it.off.to.reply.informa.pl>
Subject: Re: Linus Torvalds o jezykach programowania
Seweryn Habdank-Wojewódzki wrote:
>>>W sensie, że wszędzie musisz się posłużyć typem.
>>
>>No właśnie nie.
>>
>>Jak napiszę a + b to wiadomo że chodzi o inty
>>Jak nnpiszę jakies a + b, gdzie + to mój operator dla macierzy, to
>>wiadomo, że chodzi o macierze.
>
>
> To jak zapodaje inne nazwy, to co mnie interesuje wnioskowanie typu, jeśli
> funkcja jest osobna?

Funckja może być zrobiona dla typu polimorficznego.


>>Jak coś w środku z tym t i u robisz to sygnatury tych operacji wprowadzają
>>ci ograniczenia na typy T i U, prawda?
>
> Tak ale mam jeszcze w rękawie przeładowanie, czy nie. I przeładowanie jest
> silniejsze niż szablon.

Masz jeszcze typy polimorficzne.


>>I już. Teraz zapisujesz swoją operację:
>>
>> operacja a b c d = (rev a * trans b + c ) *_ d;
>>
>>No i już.
>
>
> Fajnie. Tylko czemu "* " musi być inna niż "*_"?

Bo *_ jest przemienna?

Poza tym nie musi -- można użyć typów polimorficznych. Albo można
zdefiniowac (w ML można, czy w Haskellu albo OCAMLu -- nie jestem pewien
funkcję * czy *_ dla różnych typów parametrów). Ale tak jest bardziej
MLowo/OCAMLowo.

System jest silny i statyczny, przeciążenie z pewnego punktu widzenia go
osłabia.


>>Patrz wyżej.
>
> Czyli nie wiedzą, bo nie wnioskują typu. Albo wnioskują źle. Jakby
> wnioskowały dobrze, to potrafiłyby rozróżnić * dla macierzy i * dla macierz
> liczba.

Potrafią. Tylko to jest w "złym stylu".

pzdr
\SK


From: ascatec <ascatec onet.eu>
Subject: Re: losowe zachowanie usleep
ascatec pisze:
> programik:
>
> -----------
> #include <iostream>
> #include <unistd.h>
>
> main() {
> int i=0;
> while (true) {
> std::cout<<i++<<std::endl;
> usleep(1);
> }
> }
> -----------
>
> raz wykonuje 1 iteracje na sekundę, raz tyle ile nadąży konsola wyświetlać, od czego to zależy? obciążenie procesora ~0.01% gdy wykonuje tą 1 iteracje na sekundę, lub ~ 40% gdy działa tak szybko (jak bym sobie tego życzył)
>
> # uname -a
> Linux xxxxxxxxxxxxxxxxxxxx 2.6.18-4-amd64 #1 SMP Mon Mar 26 11:36:53 CEST 2007 x86_64 GNU/Linux

po zamianie usleep na nanosleep dalej to samo, zastanawiam się czy to nie jest związane z jakimś oszczędzaniem energii z mianami rozdzielczości zegarów, taktowań


From: Seweryn =?ISO-8859-2?Q?Habdank=2DWojew=F3dzki?= <shw_mail wp.pl>
Subject: Re: =?ISO-8859-2?Q?=5Bc=2B=2B=5D=B3adowanie?= klas +dlopen +error
Witam

user wrote:

> Chciałem przećwiczyć sobie ładowanie klas z bibliotek. Przykład niemal
> dokładnie zerżnąłem z http://tldp.org/HOWTO/C++-dlopen/thesolution.html
> jednak mam błąd
>
> main.cpp:19: error: cannot convert ‘budynek**’ to
> ‘budynek*’ in initialization

Mi działają podobne przykłady. Postaraj się wklejając błedy nie psuć
kodowania, bo nc nie widać.

> create_t* tworz_dom = (create_t*) dlsym(dom,"create");

> typedef budynek* create_t;

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

> extern "C" budynek* create(){

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

IMHO tu masz błędy. create_t jest wskaźnikiem do budynku. A powinien być
wskażnikiem (funkcją) tworzącą budynek.

Jak wstawisz typedefa, do pierwszej linijki, to tworz_dom jest typu
budynek**, a nie jest funkcją zwracającą budynek*.

Pozdrawiam.

--
|\/\/|   Seweryn Habdank-Wojewódzki
\/\/


From: "andrew" <cut gazeta.pl>
Subject: =?iso-8859-2?Q?Re:_pensja_programisty_dla_pocz=B1tkuj=B1cego?=
Użytkownik "Artur Bać" <artur_nospam ebasoft.com.pl> napisał w wiadomości
news:fgn0f9$e32$1 news2.task.gda.pl...
> andrew pisze:
>> BTW: MS niczego nie narzuca, najwyżej pracodawcy. Równie dobrze możesz
>> pisać w C++.NET ;)
>
> Managed C++ z .NET ma tyle wspólnego z C++ co Java z asemblerem.
>

Dlatego dałem ";)" na końcu. Ma wspólną składnię w pewnym stopniu, ale
rozszerzenia dla .NET'a są po prostu brzydkie. (Ładna i spójna składnia to
może być zaleta albo wada języka jakby nie było).

Andrew


From: Seweryn =?ISO-8859-2?Q?Habdank=2DWojew=F3dzki?= <shw_mail wp.pl>
Subject: Re: Utilek do budowania =?ISO-8859-2?Q?zale=BFno=B6ci_pomi=EAdzy_headerami?=
Witam

Paweł wrote:

> wygeneruj zaleznosci za pomoca `cpp -MM -MP` i uzywaj tego w makefile-u.

Ale właśnie potrzebuję w druga stronę.

Na razie to załatwiam jakimś ręcznym skryptem:

grep "#include" *.?pp | grep "AAA.hpp" | cut -d':' -f1 | grep -v "AAA.hpp" |
sort -u | grep "\.cpp"

Wybieram pliki cpp.

A dalej ręczna dziubanina, bo teraz trzeba rekurencyjnie powtórzyć całą
operację dla plików hpp z linijki poniżej, czyli zamiast AAA.hpp należy
wykonać to samo dla każdego headera wygenerowanego przez:

grep "#include" *.?pp | grep "AAA.hpp" | cut -d':' -f1 | grep -v "AAA.hpp" |
sort -u | grep "\.hpp"

Pozdrawiam.

Ps. Czy w bashu można pisać rekurencyjne funkcje?

--
|\/\/|   Seweryn Habdank-Wojewódzki
\/\/


Kosmetyki - mleczka, szampony, środki przeciw cellulitowi


From: Seweryn =?ISO-8859-2?Q?Habdank=2DWojew=F3dzki?= <shw_mail wp.pl>
Subject: Klasa =?ISO-8859-2?Q?wewn=B1trz?= innej klasy.
Witam

Czy się różni umieszczanie klasy w innej klasie od sytuacji kiedy klasy są
na tym samym poziomie, czyli jakie są istotne różnice pomiędzy I i II.

W wątku [1] Bronek wskazuje, że klasa Bar powinna widzieć wszystko z klasy
Foo (tak to rozumiem), ale przykład III kończy się u mnie (gcc 4.1.2)
błędem - invalid use of nonstatic data member.

/* I */

class Foo
{
class Bar
{
};
// tu uzywam Bar
};

/* II */

namespace internal
{
class bar
{};
}

class foo
{
// tu uzywam internal::bar
};

/* III */

#include <iostream>

template < typename T >
void println (T const & v)
{
::std::cout << v << '\n';
}

struct Foo
{
int i;
struct Bar
{
int j;
void barwork (int j)
{
println ("barwork");
this->j = j;
//i = j * 2; // linia 20
//println(i); // linia 21
}
};
Bar b;
void foowork (int i)
{
println ("foowork");
this->i = i;
println(i);
b.barwork(i);
}
};

int main()
{
Foo f;
f.foowork(10);
}

Zakomentowane linie generują błąd:
main.cpp: In member function ?void Foo::Bar::barwork(int)?:
main.cpp:20: error: invalid use of nonstatic data member ?Foo::i?
main.cpp:21: error: invalid use of nonstatic data member ?Foo::i?

Pozdrawiam.

[1]
http://groups.google.pl/group/pl.comp.lang.c/browse_frm/thread/6dd7ac3c94cc41e7

--
|\/\/|   Seweryn Habdank-Wojewódzki
\/\/


From: Marcin Gabryszewski <firstname.surname gdata.pl>
Subject: =?ISO-8859-2?Q?Re=3A_Szybkie_tworzenie_tablic_dwuwymiaro?=
jacek.jackweb gmail.com pisze:
> [[ C++ ]]
>=20
> Witam, posiadam 2 pytania:
> 1. Jak wiadomo, w C++ tablice tworzy si=EA tak:
> string wartosci[2];
> // [... wiele kodu]
> wartosc =3D {"samochod", "koparka"};
>=20
> jak tworzy=E6 tablice wielowymiarowych, np. dwu- umiem r=F3wnie=BF:
> string wartosci[2][2];

std::string wartosci[2][2] =3D { {"w00", "w01"}, {"w10", "w11"} };

--=20
Regards,
Marcin Gabryszewski
G DATA Software Sp. z o.o.
www.gdata.pl


From: "pawel" <paw1976 poczta.onet.pl>
Subject: Re: Too many types in declaration
> Dla deklaracji unsigned long long w BC++ 5 pojawia się błąd:
>
> Too many types in declaration
> Czy można to jakoś obejść?

Może jest zmienna typu int64 ?

Paweł



From: "mx" <mx spam.no>
Subject: Re: MSVC vs. GCC
// typedef typename SomeBaseClass<TARG1, TARG2>::SomeStruct SomeStruct;

dzieeeki, wlasnie dawalem using SomeBaseClass<TARG1, TARG2>::SomeStruct;
i nie pomagalo :))

--
MX


From: "=?ISO-8859-2?Q?Marcin_Po=B3e=E6?=" <utterqvist NOSPAM.gazeta.pl>
Subject: =?ISO-8859-2?Q?Przeci=B1=BFanie_operator=F3w_a_szablony?=
mam sobie taką klase: (zapis skrócony i uproszczony)
class ManagerOfBugs
{
ofstream LogFile;

ManagerOfBugs & operator<<(const char *pcc)\
{\
LogFile<<"<li>"<<pcc<<" ";\
LogFile.flush();\
return * this;\
}
ManagerOfBugs & operator<<(const wchar_t *pcw);
{\
USES_CONVERSION;\
LogFile<<"<li>"<<W2A(pcw)<<" ";\
return *this;\
}
ManagerOfBugs & operator<<(string s);
ManagerOfBugs & operator<<(wstring ws);
ManagerOfBugs & operator<<(bool b);\
{\
LogFile<<"<li>"<<(b?"True":"False")<<" ";\
LogFile.flush();\
return *this;\
}
ManagerOfBugs & operator<<(RECT r);
ManagerOfBugs & operator<<(POINT p);
itd...
};

i tych operatorów mam mnóstwo i ciągle pojawiają sie nowe typy a do tego mam
też przeciążony operator (również dla wszystkich typów) '<' w sposób:
ManagerOfBugs & operator<(unsigned int n)\
{\
LogFile<<n<<" ";\
LogFile.flush();\
return *this;\
}

i teraz pytanie: czy da się taką różnorodność sparametryzować typem poprzez
szablon (lub dwa szablony)? Jak przeciążam typ wchar_t* to najpierw muszę go
zamienić na char* i dopiero zapisać do pliku, jak zapisuje typ bool to
zapisuję łańcuch znaków, jak int to liczbę, jak RECT to coś
takiego "[r.left,r.top,r.right,r.bottom]" ???

Proszę o pomoc

--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/


WIFI - Warszawa, Ursynów


From: Seweryn =?ISO-8859-2?Q?Habdank=2DWojew=F3dzki?= <shw_mail wp.pl>
Subject: Re: Szybkie sortowanie =?ISO-8859-2?Q?int=F3w?=
Witam

Piotr Wyderski wrote:

>> Niezupełnie. Ja nie mam żadnego kodu. Ja go po prostu *mogę* napisać a
>> Ty jesteś przerażony już samym faktem, że taka możliwość istnieje. :-D
>
> Ja jestem przerażony faktem rozpowszechniania na
> bezkonkurencyjnych warunkach kodu równoważnego
> funkcjonalnie mojemu, w którego opracowanie włożyłem
> mnóstwo środków i wysiłku.

Jest kilka spraw, o których nie piszesz.

Skąd "darmowcy" biorą kasę na pisanie zaawansowanych algorytmów?
Bywając na konferencjach -- pałcisz za to (transport, hotele, jedzenie),
kupując książki -- płacisz. Mając dostęp do netu -- płacisz.

Czyli oni ponoszą też pewne koszty. Powstaje co najwyżej pytanie jak to
jest, że oni jako zbiorowość mają możliwość wydania czegoś za free.
Jak wygląda biznes model, że jednak coś co kosztuje może być darmowe -- no
przecież hotel nie jest open source i musisz zapłacić.

Pomyśl sobie od drugiej strony, niektórzy ciężko pracują nad pewnymi
sprawami, a Ty np. masz farta i jako hobbysta w tej dziedzinie trafiasz
celnie w ich pracę, czy nie publikujesz swojego hobby?

Do tego jeszcze jeśli nie jesteś pazerniakiem to wyceniając swoje koszty
wydajesz to za 100$, bo tyle kosztowało piwo + cena Twojej roboczo minuty,
które wypiłeś myśląc. Teraz myślisz sobie zażądam 20$ za program. Bo
liczysz że kupi go 5 osób. A ile zapłacisz za otwarcie firmy, aby zarobić
te 100$ (ubezpieczenia, opłaty itd.)? Końcowo orientujesz się, że jak dasz
to za free to może ktoś Ci zapoda dotację, albo, poprosi o support, albo
konkurencja przyjdzie i da Ci 2000$ za to, żebyś zamkną swój open sklepik.
Nigdy nie wiesz co się stanie, a może ktoś wyniocha, twój soft i dostaniesz
korzystną ofertę pracy?

Na pewno sam nie postąpisz tak, że pójdziesz do wszelakiej konkurencji i
każdego się zapytasz czy oni pozwalają Ci ten produkt wydać za 20$ za
sztujkę? Nie wierzę, że tak kochasz jakąkolwiek konkurencję, aby kogo
kolwiek się pytać czy wolno Ci zaniżyć cenę. Bo masz respekt, przed tymi,
którzy albo nie mają szczęścia albo są jednak nie douczeni, z litości, że
im zabierzesz chleb? Nic takiego.

Zresztą jesteś silny to sam dampujesz rynek.

Piszesz też o modelu biznesowym i takie tam. A powiedz mi ile kosztuje
testowanie oprogramowania? Np. podaj mi współczynnik ile koderów pracuje na
ile testerów?
Zobacz, że firmy dając kod/program beta za free zyskują albo nie tracą na
testerów, tyle ile powinny tylko nieco mniej.
A prawdą jest, że testy automatyczne nie wszystko są wstanie załatwić.

Czy uważasz, że takie podejście do softu jest złe, dlaczego soft ma być jak
broń czy wódka -- jak staje się tania, to dowalasz akcyzę, aby ludzie tego
nie mogli mieć za wiele.

Zresztą model ekonomi polskiej (w sensie pojedynczego użytkownika) jest
taki, że dopiero teraz ludzie są wstanie kupić windows, czy office do domu.
Przedtem, to system kosztował 2-3 pensje a office drugie tyle o ile nie
więcej.
Z jednej strony tyle pisze się o potanianiu produkcji softu, a z drugiej
strony czemu ludzie tego nie mają odczuć tylko płacić za wszystko jak za
woły?

I jest jeszcze kwestia, nie równości cen i zarobków, która w świecie softu
jest bardzo wyraźna. Klikasz na stronę WWW i piszesz office i wyskakuje ci
200 PLN, czyli jakieś 55 Euro. No ok, dla przeciętnego Polaka to jest dużo,
ale kupi (dziś kupi), bo pensje wzrosły. Ale mieszkając na ukrainie już tak
nie powiesz, bo 55 Euro to jest więcej. Teraz czym to owocuje. Masz dwie
możliwości, albo ktoś podwinie office, albo użyje open office. Na czym
zarobisz? Na niczym. A jak obniżysz cenę, to ludzie zaczną korzystać i jak
im pensja urośnie to go kupi, a jesli nie kupi dla siebie, to mając lewą
wersję w domu do firmy kupi oryginał.

Tak więc dobre jest gładkie przejście cenowe od cen do ustalenia rzędu 10^6
USD za soft, i tak w zależności o różnych potrzeb coraz mnie j i mniej i
mniej, aż do free.

Jest jeszcze kwestia bugów, których w sofcie jest coraz więcej i więcej (nie
zaleznie od przyczyn). Mnie jako user interesuje produkt działający. I
teraz mając zapluskwiony kod jaką ustalasz cenę? Każdy nie działanie softu
drogiego ja odnotowywuję i potem wystawiam Ci faturę, że z powodu
dziadostwa moja firma poniosła takie i takie straty + odsetki + kara
umowna, za to, że sprzedając produkt nie powiedziałeś że jest dziadowski.
Więc znowu w wielkim biznesie opłaca się cenę obniżyć, aby ludzie płacąc za
coś co jest i tak zapluskwione nie pozywali Cię do sądu. Każdy powie, że
jak zapłacił 55$ za office, a on nie działa 10 minut w miesiącu, to strata
jest mała. Jak zapłaci 2000$ to już tak nie jest, że można olać.

Koleją sprawą jest jakość + support. Jeżeli ktoś chce mieć gwarancję, że nie
znikniesz z rynku to woli zapłacić, niż wziąć za darmo od kolesia
sprzedającego hamburgery, bo on może zniknąć.

A teraz powiedz mi jak to jest, że Novell (SuSE), czy Red Hat potrafią na
linuxie trzepać dużą kasę. Powiedz mi jak to jest, że maintainery Debiana
nie wkurzają się oto, chociaż ostatnio jak oblookasz kto wnosi najwięcej
poprawek, to właśnie chłopaki z Debiana. Dlaczego Debianiści nie mówią, my
harujemy, a wy zarabiacie na nas kasę?

> Widzisz, wiele rzeczy można
> całkiem łatwo odtworzyć na podstawie samej wiedzy, że to
> się da zrobić, ewentualnie przy znajomości zarysów zasad
> ich działania.

Da się.

> Weź np. hazard pointers -- każdy jako tako
> siedzacy w temacie od razu zrozumie, na czym polega sztuczka
> i sobie sam to w razie potrzeby napisze. Ale jakoś nikt wcześniej
> na to nie wpadł i dlatego pomysł zasługuje na ochronę.
> Na szczęście autor uważał podobnie i to sobie opatentował.

Kiedyś już dyskutowaliśmy o patentach. Ten kij ma na każdym końcu ostre jak
brzytwa kolce. Patentowanie wszystkiego jest zabijające i nie patentowanie
niczego też.

> Druga sprawa: "zagrożeniem" jest dopiero istniejący kod,
> przechwałki "napiszemy taki program, że świat zadziwimy!
> Wskaźniki nie wytrzymają. Normy poprzekraczamy,
> bo stać nas na to!" to kategoria morskich opowieści.

No więc te przechwałki dotyczą również poważnego biznesu i to patentowego
biznesu. Moje laborki ze studiów są w USA opatentowane (zresztą później).

Czytałem opis sterownika i przeczytałem, że sterownik jest oparty o
rewelacyjny opatentowany w USA algorytm. Poczym sterownik nie spełniał
podstawowych zadań. A konkurencja miała napisane jak wygląda alborytm i to
to zachowali dla siebie to jakąś macierz kilku tysięcy współczynników.
Tak więc Ci co patentują też nie raz są kompletnymi ignorantami wiedzy
powszechnej.


Pozdrawiam.

--
|\/\/|   Seweryn Habdank-Wojewódzki
\/\/


From: =?iso-8859-2?Q?Pawe=B3_Kierski?= <news pkierski.net>
Subject: =?iso-8859-2?Q?Re:_Dlaczego_biblioteka_boost_jest_taka_z=B3a=3F?=
Sebastian Nibisz w wiadomości <famats$58h$1 inews.gazeta.pl> pisze:
[...]
> Czyli niby jest biblioteką jezyka obiektowego a korzysta się z niej jakby
> była napisana dla języka C.
> Przykładem niech będa standardowe kontenery, na których większość operacji
> wykonuje się za pośrednictwem zwykłych funkcji.

Bo C++ nie jest językiem tylko obiektowym. Równie dobrze można
programować w nim strukturalnie. Pozwala również na generyczne
zapisywanie operacji, typów itd.

A operacje z std:: wykonuje się z reguły za pomocą generycznych
algorytmów (to te "makra") na iteratorach (obiektach), które to
iteratory najczęściej są udostępniane przez kontenery (obiekty).
Wszystko po to, żeby nie dublować funkcjonalności, o ile nie jest to
potrzebne (np. std::list ma ::remove(), choć jest std::remove).

--
Paweł Kierski
news pkierski.net
dodaj "[nomorespam]" w temacie jeśli piszesz z domeny innej niż .pl,
albo koniecznie chcesz obejść moje filtry 8-)


From: dienet <"dienet[anty_spam]" poczta.fm>
Subject: Re: Zawody w programowaniu
Dnia 19-10-2007 o 15:00:40 pawel <paw1976 poczta.onet.pl> napisał(a):

> Ile można zarobić?

Duzo obgryzionych paznokci, metlik w glowie, nieprzespane noce i bol glowy
;]

--
pozdr0
dienet

"Old C programmers never die. They're just cast into void."


From: =?iso-8859-2?Q?Maciek_Ob=B3aza?= <moblazaREMOVE box43.pl>
Subject: Re: czy to faktycznie wyciek ?
In news:fdqerg$g76$1 inews.gazeta.pl,
*Remigiusz Zukowski" <"roland[USUNTO]25* <"roland[USUNTO]25" gmail.com>
typed:
> Witam, koledzy wcześniej wyjaśnili w czym rzecz, przypomnę tylko, że
> nie trzeba jawnie wołać _CrtDumpMemoryLeaks() - jest ona wołana
> automatycznie przy zamykaniu programu.
> Czasami zdarzają się też 'fałszywe' wycieki pamięci, przykładowo (nie
> zawsze) dla statycznych obiektów z modułu ładowanego dynamicznie przez
> LoadLibrary i nie zwolnionego przez FreeLibrary
> Dużo lepszym systemem do sprawdzania alokacji jest ten poniżej (m.in.
> nie reaguje na wspomnianą powyżej sytuację):
> http://dmoulding.googlepages.com/home
> http://www.codeproject.com/tools/visualleakdetector.asp

vld znam, problem w tym że chciałbym support dla platformy x64, na co
wstawki w asmie w tym rozwiązaniu nie pozwalają, gdyż jak powszechnie
wiadomo nie są i prawdopodobnie nie będą wspierane w tej edycji
kompilatora, w takim razie jestem zmuszony do poszukiwania własnego
rozwiązania, ukradkiem zerkając np. na C++ Trivial Logger, na co - z tego
co rozumiem licencja pozwala. Poza tym temat mnie zainteresował :-)

--
Maciej Obłaza


From: glab.frm poczta.onet.pl
Subject: Re: dll i visual c++ 2005
ntive c++, znaczy daje new project, tam wybieram c++, win32 , kolejenie
wskazuję ze chcę DLL i znaznaczam epmty project

--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl


Kosmetyki odmładzające - sklep internetowy z kosmetykami


From: Mateusz Loskot <see.my signature.net>
Subject: Re: make -j3 - co na to pakiet visual studio
Maciek Obłaza wrote:
> Mateusz Loskot wrote:
>> Natywnie, odpowiednikiem GNU make dla Windows jest Microsoft NMAKE
>> (nie myliś z AT&T nmake). NMAKE nie wspiera "równoległości" zadań
>> wykonywanych lokalnie.
>
> Szkoda, szkoda. Nie wiesz czy będzie może opcja w przyszłości ?

Nie mam pojęcia, ale wątpię. Z tego co zauważam, Microsoft mocno ciśnie
do przesiadki na solution/project files + gadżety jak msbuild, etc.

Pozdrawiam
--
Mateusz Loskot
http://mateusz.loskot.net


From: =?UTF-8?B?UGF3ZcWCIFRvbXVsaWs=?= <ptomulik wp.pl>
Subject: [C++] Jawne =?UTF-8?B?d3l3b8WCYW5pZSBrb25zdHJ1a3RvcmEgamVkbm9hcmc=?=
Witam.

Próbuje użyć konstruktora klasy jako zwykłej funkcji statycznej,
(w celu skrócenia zapisu przy wywoływaniu). Przykładowo:

template<int N>
struct fill
{
template<typename Tx, typename Ta>
fill(Tx* x, Ta a) { for(int i=0;i<N;i++) x[i] = a;}
}
// I gdzieś indziej w kodzie:
double v[10];
fill<10>(v,0.0);

Wszystko działa, dopóki konstruktor ma więcej niż 1 argumentów.
Problem pojawia sie, gdy mam do czynienia z konstruktorem
jednoargumentowym i to niezaleĹźnie od tego czy uĹźywam szablonĂłw
czy nie. Efekt jest następujący:

Kompilacja kodu, typu:

struct S
{
S(double*) {}
};
int main()
{
double* x; // linia 7
S(x); // linia 8
}

kończy się u mnie komunikatami:

a.cpp:8: error: conflicting declaration ‘S x’
a.cpp:7: error: ‘x’ has a previous declaration as ‘double* x’

Takie same błędy otrzymuję jeśli w ogóle nie zdefiniuję konstruktora,
tj. dla takiego przypadku:

struct S { };
int main()
{
double* x;
S(x);
}

Jedyne obejście, jakie znalazłem, to użycie zapisu:

S dummy(x);

zamiast:

S(x);

ale to burzy mi trochę filozofię, bo walczę o jednolity i prostą
składnię wywołania funkcji.

Powiedzcie proszę dlaczego kod przytoczony na początku
nie chce mi siekompilowac, gdzie robie błąd? Czy da sie go
jakoś obejść?

Kompiluję gcc:

gcc version 4.2.1 (Debian 4.2.1-5)


--
~~~~~~~~~~~~~~~~~~~~~~~
~~~~ Paweł Tomulik ~~~~
~~~~ GG: 2800492 ~~~~
~~~~~~~~~~~~~~~~~~~~~~~


From: Mateusz Loskot <see.my signature.net>
Subject: Re: make -j3 - co na to pakiet visual studio
SirMike wrote:
> Mateusz Loskot wrote:
>> Nie twierdzę, że jest to do niczego, ale jak np. rozwiązujesz problem
>> zew. zależności, które u użytkownika mogą być w różnych lokalizacjach
>> niż Twoim środowisko. IOW, jak uzyskujesz dynamizm konfiguracji a'la
>> ./configure?
>
> Mozesz rozwinac? Jakis przyklad?

A bardzo proszę, SOCI.
Projekt składa się z "core + N number of backends" gdzie każdy backend
jest zależny od zewnętrznej biblioteki klienckiej dla danego DBMS.

Problem jest następujący: jak w przyjazny sposób skonfigurować
zestaw projektów (.sln + N .vcproj) aby użytkownik mógł określić
następujące elementy:

1. Jakie backendy chce zbudować
2. Jaka jest lokalizacja, w jego systemie, binarek oraz nagłówków dla
bibliotek klienckich

Czyli, analogicznie, chcę uzyskać coś a'la:

../configure \
--enable-backend-postgresql \
--with-postgresql=/path/to/pgsql

z tym że dla solucji Visual Studio.

Pozdrawiam
--
Mateusz Loskot
http://mateusz.loskot.net


From: Matuzalem <codemaster_ op.pl>
Subject: Re: debugowanie dll
On 28 Sie, 10:34, Rafa=B3 Sobalewski <rsoba... tlen.pl> wrote:

> Sorry, =BFe na tej grupie, ale nie wiem gdzie zapoda=E6 og=B3oszenie.
> Interesuje mnie temat debugowania i modyfikacji bibliotek dll. Modyfikacja
> niestety na poziomie assemblera.

Czemu niesetety? przeceiz asm to bardzo piekny jezyk.

> Ksi=B9=BFki do asma mam, co=9C nieco=9C z tego rozumiem, niestety ksi=B9=
=BFki omawiaj=B9 jedynie
> (te kt=F3re posiadam) tworzenie i assemblacj=EA program=F3w z kod=F3w =9F=
r=F3d=B3owych.

Niedawno ja tutaj polecalem:
wydawnictwo: Helion
tytul: "Cracking bez tajemnic"
autor: Jakub Zemanek

No i oczywiscie zasoby w sieci; jest tego multum (keywords: reverse
engineering; crack(ing)(me) itp. )

> Biblioteka jest ju=BF gotowa, a musz=EA do niej co=9C
> doda=E6. Teoretycznie mog=EA da=E6 jaki=9C rozkaz
> skoku w inne miejsce i potem rozkaz powrotu, bo nie mam innej mo=BFliwo=
=9Cci
> rozszerzy=E6 istniej=B9c=B9 ju=BF funkcj=EA.

Jesli ta funkcja my byc wprowadzona na stale, to zgadza sie.

> I borykam si=EA z takimi podstawami jak:
> - czy gdzie=9C w dllce, a pewnie tak jest, jest zadeklarowany rozmiar dla=
kodu
> i czy robi=B9c taki manewr musz=EA sobie policzy=E6 nowe warto=9Cci tego =
rozmiaru i
> zmieni=E6 w dllce te warto=9Cci?,

Tak, sa pewne wartosci ktore musisz zmienic (w zaleznosci od sposobu
jaki zastosujesz do dodania wlasnej funkcji).
(keywords: PE, IAT, IMAGE_IMPORT_DESCRIPTOR, itp.)

> - czy je=9Cli moje dodatki b=EAd=B9 odk=B3ada=E6 co=9C na stosie, ale p=
=F3=9Fniej to
> pozdejmuj=EA (przez zako=F1czeniem procedury) to czy musz=EA obawia=E6 si=
=EA o
> wywalenie si=EA programu?

Jesli wszystko zostanie poprawnie zaprojektowane to nie.

> - jek debugowa=E6 tego typu rzeczy? Mam OllyDbg, kt=F3ry teoretycznie =B3=
aduje
> bibliotek=EA, ale

Tak, olly ma "ale"... lepiej uzyj np. IDA.

Ogolne keyword to "inject your own code into a dll" (i podobne) ->
google.

Pozdrawiam


From: Miroslaw Makowiecki <tytan15 poczta.onet.pl>
Subject: Re: [c++] const string a string const
xmen wrote:

> Zawsze stosuje zapis const string& x w metodach klasy.
> Jednak widziałem już kiedyś zapis string& const x. Przed chwilą również i
> chciałbym się w końcu dowiedzieć, czy te zapisy są pokrewne, czyli można
> je używać zamiennie, czy oznaczają coś zupełnie innego?
>
> Coś mi się kojarzy (ale głowy nie dam), że chyba tez o oczy obiło mi się
> const string& const x <_<
>
> Bardzo bym prosił o uświadomienie mnie :)
>
Może być const std::string&x lub std::string const&x co jest właściwie to
samo znaczy. Zapis std::string &const x jest niepoprawny!
Pozdrawiam.


Serwery


From: Miroslaw Makowiecki <tytan15 poczta.onet.pl>
Subject: Re: [c++] typedef na =?UTF-8?B?d3NrYcW6bmlr?=
lszk wrote:
Możesz wykorzystać klasy abstrakcyjne.
class tytan{//klasa bazowa
/*metody abstrakcyjne*/
};
class tytan1:public tytan{//dla bazy danych mysql
/*definicja metod abstrakcyjnych*/
};
class tytan2:public tytan{//dla bazy danych postgresql
/*definicja metod abstarkcyjnych*/
};
a kod pseudo kod wyglada tak:
tytan*pod;
Gdy baza mysql to
pod=new tytan1(/*parametry konstruktora*/);
lub gdy baza postgresql to
pod=new tytan2(/*parametry konstruktora*/);
koniec warunku
/*operracja na klasie tytan,
trzeba pamiętać,że operacje na tytan, to są tak naprawdę operację na tytan1
lub tytan2,w zależności jaką mamy bazę danych.*/
Pozdrawiam.


następna strona