How to define function which operates on iterator convertible toT*

A

AlesD

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
 
D

David Hilsee

AlesD said:
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()).
 
N

News For Mohan

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(const 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,
 
V

Victor Bazarov

News said:

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(const 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,

[...]
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top