-
1. Data: 2010-01-11 07:55:17
Temat: Efektywne syntezowanie op= z op ?
Od: Maciej Pilichowski <P...@g...com>
Hej,
Jesli mamy zdefiniowany op= to automatycznie mozemy syntezowac op.
Np. w C++
template <class X, class Y>
X op(const X &x,const Y &y)
{
X t(x);
t op= y;
return t;
}
oczywiscie musimy sie zdecydowac na jakies op.
Ale teraz odwrotny problem -- mamy zdefiniowane op, a chcemy dostac
op=
template <class X, class Y>
void op(X &x,const Y &y)
{
x = x op y;
}
Mimo, ze kod jest krotszy, to jednak jest niebezpieczenstwo niskiej
efektywnosci. Pytanie wiec -- jak to zrobic wydajnie?
A skad pytanie -- w C# zalecane jest takie definiowanie operatorow,
ktore nie zmieniaja argumentu. Reszte ma byc madrze dosyntezowana.
Zastanawiam sie wiec, jakich MS technik uzywa, ze im wychodzi to
wydajnie (klasyk to operator ++pre i post, normalnie post definiuje
sie na bazie pre, ale w C# jest wlasnie odwrotnie).
milego dnia, hej
-
2. Data: 2010-01-12 12:30:12
Temat: Re: Efektywne syntezowanie op= z op ?
Od: Krzysiek Kowaliczek <k...@g...com>
Użytkownik Maciej Pilichowski napisał:
[...]
> A skad pytanie -- w C# zalecane jest takie definiowanie operatorow,
> ktore nie zmieniaja argumentu. Reszte ma byc madrze dosyntezowana.
> Zastanawiam sie wiec, jakich MS technik uzywa, ze im wychodzi to
> wydajnie (klasyk to operator ++pre i post, normalnie post definiuje
> sie na bazie pre, ale w C# jest wlasnie odwrotnie).
Biblioteka standardowa C++ też używa podobnej techniki np.:
std::map wymaga tylko operatora <, resztę jak == potrafi
zrobić sobie sama.
Jeżeli chodzi o rozwiązanie ogólne, to istnieje takowe w boost:
http://www.boost.org/doc/libs/1_41_0/libs/utility/op
erators.htm
Pozdrawiam
KK
-
3. Data: 2010-01-12 14:44:06
Temat: Re: Efektywne syntezowanie op= z op ?
Od: Maciej Pilichowski <P...@g...com>
On Tue, 12 Jan 2010 13:30:12 +0100, Krzysiek Kowaliczek
<k...@g...com> wrote:
>Biblioteka standardowa C++ też używa podobnej techniki np.:
>std::map wymaga tylko operatora <, resztę jak == potrafi
Przeciez to sa dwa rozne operatory, a co wiecej oba zwracaja wyniki
(sa funkcjami).
Pytam jak efektywnie przejsc od op do op=
np. jak zrobic z
* (mnozenie, wynik jest zwracany)
*= (mnozenie i przypisanie)
milego dnia, hej
-
4. Data: 2010-01-12 20:12:38
Temat: Re: Efektywne syntezowanie op= z op ?
Od: "Marcin 'Qrczak' Kowalczyk" <q...@k...org.pl>
On Jan 11, 8:55 am, Maciej Pilichowski
<P...@g...com> wrote:
> template <class X, class Y>
> void op(X &x,const Y &y)
> {
> x = x op y;
>
> }
>
> Mimo, ze kod jest krotszy, to jednak jest niebezpieczenstwo niskiej
> efektywnosci. Pytanie wiec -- jak to zrobic wydajnie?
Wydajniej niż to w ogólności się nie da.