From: Derek G. <fri...@gm...> - 2009-02-05 03:17:08
|
Aha I figured I was doing it wrong... It's fine the way it is I think. If we really don't have to specify that second argument then I'm satisfied. Derek Sent from my iPhone On Feb 4, 2009, at 6:40 PM, Roy Stogner <roy...@ic...> wrote: > > On Wed, 4 Feb 2009, Derek Gaston wrote: > >> So I just tried to use libmesh_cast_ptr for the first time.... and >> I'm >> not really sure about the interface. Here's what I'm doing >> >> PetscMatrix<T> * pmatrix = libmesh_cast_ptr<PetscMatrix<T>*, >> SparseMatrix<T> >(this->_matrix); > > Try: > > PetscMatrix<T> *pmatrix = libmesh_cast_ptr<PetscMatrix<T>*>(this- > >_matrix); > > Told gets automatically inferred from the argument type; you shouldn't > have to explicitly specify it at all. > > And this way it looks like a regular C++ something_cast<Something*>(). > >> What I don't like is how you have to pass Tnew as a pointer type (ie >> with a *) but Told you pass _without_ a *. I don't really care >> either >> way... but it feels like both arguments should be the same. > > The status of Tnew as a pointer is to make the syntax look like a C++ > cast. > > The status of Told as a non-pointer was originally intended to allow > both "libmesh_cast_ptr" and "libmesh_cast_ref" to have the same name, > "libmesh_cast", but I never quite got the overloading working > correctly - IIRC the compiler couldn't decide that a pointer-to-Told > shouldn't really be interpreted as a reference-to-Told (where Told is > now a pointer-to-T) instead. > > Should we change Told to be a pointer too? That will still be API > compatible, but it might make error messages more confusing when > someone accidentally calls libmesh_cast_ptr(some_non_pointer). > --- > Roy |