I have some VERY inefficient code in which many lines appear 4 times as I go through permutations with "<" and ">" operations and a variety of variables and constants. It would seem that there is a way to write the function once and pass in the operators along with the necessarily changing values and"ref" variables. What technique do I have to learn? "Delegates" have been suggested but I don't see how to use them in this manner. This is in C# 2.0, VS2005, but if the technique is generic and can be used with C++ too, that would be great.
Request for some code: The following appears in many guises, with different "<" and ">" signs as well as a mix of "+" and "-" signs:
if (move[check].Ypos - move[check].height / 200.0D < LayoutManager.VISIO_HEIGHT - lcac_c.top)
{
move[check].Ypos = move[check].Ypos + adjust;
.
.
.
After defining the Enum Operator in the Comparer class
You can make a call like this:
In C++, use the
std::less
andstd::greater
functors. Both of these methods inheritstd::binary_function
, so your generic function should accept instances of this type.In .NET, the equivalent to
std::binary_function
isFunc<T, U, R>
. There are no equivalents tostd::less
andstd::greater
, but it is fairly trivial to create them. See the following example.Note, the above code uses the
Func<>
class from .NET 3.5. If this is not acceptable, consider defining you own delegate.C++ invocation example:
C# invocation example:
EDIT: I corrected the example of the functor class as applying < or > operators to a generic type doesn't work (in the same manner as it does with C++ templates).
In C# use delegates for passing the "
<
" and ">
" operation to the code that's doing the work.C# Example:
You should also check that the delegate you get as a paramater is not NULL.
This is the C method for doing so: