Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > How to define function which operates on iterator convertible toT*

Reply
Thread Tools

How to define function which operates on iterator convertible toT*

 
 
AlesD
Guest
Posts: n/a
 
      08-08-2004
Hello,

maybe my question is stupid, but...

I have function/algorithm which operates on sequence holding objects of
type T. The problem is that I do not know (at the declaration time)
which sequence (vector<T> or list<T>) will be used.

class element_t {
void some_method(void);
}

template <class InputIterator>
void visitor(InputIterator first, InputIterator last)
{
// some code
first->some_method(); // Error here
}

How can I specify that InputIterator is convertible to T*?

Thanks in advance, Ales
 
Reply With Quote
 
 
 
 
David Hilsee
Guest
Posts: n/a
 
      08-08-2004
"AlesD" <(E-Mail Removed)> wrote in message
news:cf5vkg$2vc$(E-Mail Removed)...
> Hello,
>
> maybe my question is stupid, but...
>
> I have function/algorithm which operates on sequence holding objects of
> type T. The problem is that I do not know (at the declaration time)
> which sequence (vector<T> or list<T>) will be used.
>
> class element_t {
> void some_method(void);
> }
>
> template <class InputIterator>
> void visitor(InputIterator first, InputIterator last)
> {
> // some code
> first->some_method(); // Error here
> }
>
> How can I specify that InputIterator is convertible to T*?


What's the error? The following works just fine:

#include <list>

struct element_t {
void some_method(){}
};

template <class It>
void visitor(It beg, It end) {
beg->some_method();
}

int main() {
std::list<element_t> elems(1);
visitor( elems.begin(), elems.end() );
}

If the container holds pointers instead of instances of element_t, then you
should dereference the iterator before using operator->
((*beg)->some_method() instead of beg->some_method()).

--
David Hilsee


 
Reply With Quote
 
 
 
 
News For Mohan
Guest
Posts: n/a
 
      08-10-2004
Hi,

I am using ostrstream object.I am using the str() function to get the char
buffer. The function is returning the pointer of char buffer , but it is
adding some garbage at the end. This behaviour is not predictable .
Sometimes it is returning the char buffer correctly , sometimes it is
returning the char buffer and some garbage attached to it at the end.I am
initialising the ostrstream object by fill('\0') function.

Can U please suggest some solution.

I am writing the code below for reference.

tBool clClusterCheckResults::logUplinkZeroCellError(cons t clCluster&
corfCluster,
RBINTValOrderedVector <int> a_vZCsNotRetained)
{
bool a_bReturnValue(false);
ostrstream myBuffer;
myBuffer.fill('\0');
a_bReturnValue = true;

myBuffer << corfCluster // << opearor is overloaded for clCluster class
<< " WARNING: The Cluster has no Uplink ZeroCells. "
<< " The following Zero Cells with Cobounding OC, with Uplinks are not
retained "
<< " in the higher level. (ZC Index) - ";

for(int iZeroCellIterator = 0 ;
iZeroCellIterator < a_vZCsNotRetained.length() ;
iZeroCellIterator++)
{
myBuffer << a_vZCsNotRetained[iZeroCellIterator] << " ";
}

myBuffer << "END\n";
cout<< "``````````PRINTING mybuffer logUplinkZeroCellError`````````\n";
cout<< myBuffer.str(); //Here the output is coming errorous
cout<< "``````````OVER``````````````````````````````````` ``````````\n";

m_oReport.logErrorMessage(myBuffer);

m_oResultsCounter.incrementErrorCount(
corfCluster.getLevel(),
UplinkZeroCellCheck,


"David Hilsee" <(E-Mail Removed)> wrote in message
news(E-Mail Removed)...
> "AlesD" <(E-Mail Removed)> wrote in message
> news:cf5vkg$2vc$(E-Mail Removed)...
> > Hello,
> >
> > maybe my question is stupid, but...
> >
> > I have function/algorithm which operates on sequence holding objects of
> > type T. The problem is that I do not know (at the declaration time)
> > which sequence (vector<T> or list<T>) will be used.
> >
> > class element_t {
> > void some_method(void);
> > }
> >
> > template <class InputIterator>
> > void visitor(InputIterator first, InputIterator last)
> > {
> > // some code
> > first->some_method(); // Error here
> > }
> >
> > How can I specify that InputIterator is convertible to T*?

>
> What's the error? The following works just fine:
>
> #include <list>
>
> struct element_t {
> void some_method(){}
> };
>
> template <class It>
> void visitor(It beg, It end) {
> beg->some_method();
> }
>
> int main() {
> std::list<element_t> elems(1);
> visitor( elems.begin(), elems.end() );
> }
>
> If the container holds pointers instead of instances of element_t, then

you
> should dereference the iterator before using operator->
> ((*beg)->some_method() instead of beg->some_method()).
>
> --
> David Hilsee
>
>



 
Reply With Quote
 
Victor Bazarov
Guest
Posts: n/a
 
      08-10-2004
News For Mohan wrote:
> Hi,


Let me ask you right away, why did you reply to a completely unrelated
post instead of posting a new thread?

>
> I am using ostrstream object.I am using the str() function to get the char
> buffer. The function is returning the pointer of char buffer , but it is
> adding some garbage at the end. This behaviour is not predictable .
> Sometimes it is returning the char buffer correctly , sometimes it is
> returning the char buffer and some garbage attached to it at the end.I am
> initialising the ostrstream object by fill('\0') function.


There is no need to "initialise" an ostringstream object in any way.
The constructor for the ostringstream class takes care of that.

>
> Can U please suggest some solution.


Drop the call to 'fill' for starters and RTFM about ostringstream class
to learn what 'fill' does to it.

>
> I am writing the code below for reference.
>
> tBool clClusterCheckResults::logUplinkZeroCellError(cons t clCluster&
> corfCluster,
> RBINTValOrderedVector <int> a_vZCsNotRetained)
> {
> bool a_bReturnValue(false);
> ostrstream myBuffer;
> myBuffer.fill('\0');
> a_bReturnValue = true;
>
> myBuffer << corfCluster // << opearor is overloaded for clCluster class
> << " WARNING: The Cluster has no Uplink ZeroCells. "
> << " The following Zero Cells with Cobounding OC, with Uplinks are not
> retained "
> << " in the higher level. (ZC Index) - ";
>
> for(int iZeroCellIterator = 0 ;
> iZeroCellIterator < a_vZCsNotRetained.length() ;
> iZeroCellIterator++)
> {
> myBuffer << a_vZCsNotRetained[iZeroCellIterator] << " ";
> }
>
> myBuffer << "END\n";
> cout<< "``````````PRINTING mybuffer logUplinkZeroCellError`````````\n";
> cout<< myBuffer.str(); //Here the output is coming errorous
> cout<< "``````````OVER``````````````````````````````````` ``````````\n";
>
> m_oReport.logErrorMessage(myBuffer);
>
> m_oResultsCounter.incrementErrorCount(
> corfCluster.getLevel(),
> UplinkZeroCellCheck,
>
> [...]

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
Keyboard "ENTER" key operates wrong function. How to fix? Greg Guarino Javascript 6 06-25-2007 11:27 PM
How DOMError operates? Max XML 0 10-17-2006 09:35 AM
About typedef -- define the function pointer or define function model? robin liu C Programming 3 04-21-2006 03:26 PM
Do you want to own a business that operates 24 HOURSX7 days? Martin Computer Support 1 10-13-2003 05:04 AM



Advertisments