467,080 Members | 935 Online
Bytes | Developer Community
Ask Question

Home New Posts Topics Members FAQ

Post your question to a community of 467,080 developers. It's quick & easy.

How to define function which operates on iterator convertible toT*

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
Jul 22 '05 #1
  • viewed: 1177
Share:
3 Replies
"AlesD" <al****@seznam.cz> wrote in message
news:cf**********@mrazik2.dkm.cz...
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
Jul 22 '05 #2
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" <da*************@yahoo.com> wrote in message
news:pv********************@comcast.com...
"AlesD" <al****@seznam.cz> wrote in message
news:cf**********@mrazik2.dkm.cz...
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

Jul 22 '05 #3
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,

[...]

Jul 22 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

12 posts views Thread by Roel | last post: by
8 posts views Thread by Alexander Stippler | last post: by
11 posts views Thread by franklini@hotmail.com | last post: by
1 post views Thread by PengYu.UT@gmail.com | last post: by
12 posts views Thread by Raider | last post: by
2 posts views Thread by Mark P | last post: by
3 posts views Thread by jarek | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.