Well... I've found a workaround.  It turns out that I can just inject my own
template specializations into the global namespace.... and they will get
picked up by the compiler.  So I just made specializations for
std::vector<Real> and std::vector<std::vector<Real> >.... and it works.
This way I don't have to modify libMesh.

Still wish I could figure out the proper syntax there though...

Derek

On Mon, Dec 22, 2008 at 4:39 PM, Derek Gaston <[email protected]> wrote:

> I've done similar things in the past... but that isn't working in this
> case.  In particular I get:
> error: using 'typename' outside of template
> error: 'T' was not declared in this scope
>
> Sigh.
>
> Derek
>
> On Mon, Dec 22, 2008 at 2:55 PM, John Peterson <
> [email protected]> wrote:
>
>> Hey,
>>
>> Not sure if this is it but could you try:
>>
>> void Parameters::Parameter<typename std::vector<T> >::print
>> (std::ostream& os) const
>>
>> (just add the typename qualifier, everything else the same.)  Anyway,
>> that is what I always try when I'm dealing with templates and there is
>> a type which depends on T...
>>
>> --
>> John
>>
>>
>>
>> On Mon, Dec 22, 2008 at 2:38 PM, Derek Gaston <[email protected]> wrote:
>> > Ok - I give up... someone tell me what the hell I'm doing wrong.  I'm
>> trying
>> > to add the following function to parameters.h (right underneath the
>> generic
>> > version):
>> > template <typename T>
>> > inline
>> > void Parameters::Parameter<std::vector<T> >::print (std::ostream& os)
>> const
>> > {
>> >   for (unsigned int i=0; i<_value.size(); i++)
>> >     os << _value[i] << " ";
>> > }
>> > And I get errors:
>> > invalid use of undefined type 'class
>> Parameters::Parameter<std::vector<T,
>> > std::allocator<_CharT> > >'
>> > /Users/gastdr/projects/libmesh/include/utils/parameters.h:163: error:
>> > declaration of 'class Parameters::Parameter<std::vector<T,
>> > std::allocator<_CharT> > >'
>> > /Users/gastdr/projects/libmesh/include/utils/parameters.h:260: error:
>> > template definition of non-template 'void
>> > Parameters::Parameter<std::vector<T, std::allocator<_CharT> >
>> >>::print(std::ostream&) const'
>> > /Users/gastdr/projects/libmesh/include/utils/parameters.h: In member
>> > function 'void Parameters::Parameter<std::vector<T,
>> std::allocator<_CharT> >
>> >>::print(std::ostream&) const':
>> >
>> > But... if I do:
>> > template <>
>> > inline
>> > void Parameters::Parameter<std::vector<Real> >::print (std::ostream& os)
>> > const
>> > {
>> >   for (unsigned int i=0; i<_value.size(); i++)
>> >     os << _value[i] << " ";
>> > }
>> > Like normal template specialization.... it works fine.  I've tried
>> looking
>> > this up in various places.... and from what I can see I'm doing it
>> > correctly.... so it's time for some outside advice.  I've also tried
>> > hundreds of permutations.... and just can't get the damn thing to go.
>> > Thanks!
>>
>
>
------------------------------------------------------------------------------
_______________________________________________
Libmesh-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libmesh-devel

Reply via email to