I'm tired of having to cook up hard-coded fptr and gptr arguments to
pass to methods like System::project_vector() and
ExactSolution::attach_exact_value(); I'd prefer to be able to pass in
function objects instead.

But I also want to avoid breaking backwards compatibility, so we need
some species of function object, a WrapperFunction, to be the argument
to these methods, so that function pointers passed in can be
implicitly converted to WrapperFunction temporaries.

But I don't want to force everyone to subclass WrapperFunction, so it
needs to also be constructable from any FunctionBase-derived object.


Now here's the dilemma:


Strategy A:
If we have WrapperFunction store a copy of the FunctionBase-derived
object, then for that copy to be useful we need a
FunctionBase::clone() method to avoid slicing.

Strategy B:
If we have WrapperFunction instead store a FunctionBase*, then it
can't be constructed from a temporary.  I.e. users won't be able to
do:

// case 1
ExactSolution::attach_exact_value (ZeroFunction()); // grossly contrived example

They'll have to do:

// case 2
ZeroFunction z;
ExactSolution::attach_exact_value (z);


Fortunately we'll be taking a non-const FunctionBase& argument, so
case 1 will give us a compile-time error rather than a dangling
pointer, but it's still a tradeoff.


I'm leaning towards Strategy B: slightly more annoying syntax for new
functor users, but no chance of breaking existing code from users who
have their own classes derived from FunctionBase.  Before I finish
implementing it: anyone else have ideas or preferences?
---
Roy

------------------------------------------------------------------------------
Keep Your Developer Skills Current with LearnDevNow!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-devel

Reply via email to