#### Archived

This topic is now archived and is closed to further replies.

# Returning Templates

This topic is 6011 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

Heya, I''m having a serious problem here, I try to return a template class from a function and it all goes to hell. Basically I am trying to do this:
TArray& ListFiles( /* blah */ );
or this:
int ListFiles( TArray* /* blah */ );

and none of them return the Array Object properly. I.e. its all fuX0rd... I''m using MSVC 6.0 BTW and so I am wondering if this is a compiler bug, template bug, or that I have to do something special (like make a good Copy constructor?). -Cheers. P.S. I''ve already got ideas to make a wrapper class for TArray and my string class works okay.

##### Share on other sites
The problem is with your code; it''s not a compiler bug.

Try something like this:

template TArray& ListFiles(/* blah */) {...}// Or...template int ListFiles(TArray *t, /* blah */);// Note: you may have to call your function like this:// TArray t = ListFiles(/* blah */);

Hope this helps.

##### Share on other sites
Sorry.... Let''s try this again, shall we?

template < typename T >
TArray< T >& ListFiles(/* blah */) {...}

// Or...

template < typename T >
int ListFiles(TArray< T > *t, /* blah */);

// Note: you may have to call your function like this:
// TArray< int > t = ListFiles< int >(/* blah */);

##### Share on other sites
Well the thing is that TArray, and BString are already defined classes, and that particular function is defined within another class.
i.e.
template  class TArray { ... };// andclass BString { ... };// etc

Strickly speaking
TArray&

is just the return type.

And the way that I''m calling it is like so:

TArray Stuff = Something.ListFiles(/* blah */);

It still stuffs up then, so I am really wondering if its got anything to do with the = operator. Its just wierd...

##### Share on other sites
It appears your templates got cut off (because this board seems to interpret angular brackets as HTML tags).

Anyway, you can''t do something like this:

TArray t = ...;

You have to give TArray a type. So it''d be like this:

  TArray t = Something.ListFiles(/* blah */);

You have to specify a type for the template class when you call it.

Also, if the return type is "TArray&" (and not "TArray< T >&"), and TArray is a template then that code is probably wrong. It needs to look like:

template< typename T >
TArray< T >& Something::ListFiles(/* blah */) { ... }

##### Share on other sites
Yeah it got cut off, basically I have done everything that you have suggested it before, (I''m not that much of an idiot you know).

Oh well I''ll just make a wrapper class or something.