Attention: you have posted C++ template code on PHP mailing list. Please
pay a $100 fine immediately and carefully proceed to the exit.
-Andrei
On Mon, 07 Feb 2005, Terje Sletteb� wrote:
> To illustrate its use, I can give a "simple" example in C++:
>
> #include <iostream>
>
> class plus
> {
> public:
> int operator()(int a,int b) { return a+b; }
> };
>
> template<class T>
> class apply1
> {
> public:
> apply1(int v) : bound_1st(v) {}
>
> int operator()(int b) { return T()(bound_1st, b); }
>
> private:
> int bound_1st;
> };
>
> int main()
> {
> std::cout << plus()(1,3) << "\n";
>
> std::cout << apply1<plus>(1)(3) << "\n";
> }
>
> The first line of main() creates a "plus" object ("plus()"), and calls its
> overloaded operator() with 1 and 3, giving 4. The second line creates an
> "apply1" object (taking "plus" as a type parameter, and 1 as a constructor
> parameter - "apply1<plus>(1)"), and then its overloaded operator() is called
> with 3. As the first parameter, 1, is "bound" by "apply1", the result is,
> once again, 4. So the above prints "4 4" (separated by newline).
>
> apply1<plus>(1) creates a function object which has bound one of plus'es
> parameters, which means it becomes a "1 + ?" function, effectively, or in
> other words, a partial application of the "plus" function (object).
>
> Naturally, you may get a similar effect in PHP by using named member
> functions rather than operator(). As another poster pointed out, $object()
> already has a (different) meaning.
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php