Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #5389
| Path | csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!gegeweb.org!news.glorb.com!news-out.readnews.com!news-xxxfer.readnews.com!panix!not-for-mail |
|---|---|
| From | Ruben Safir <ruben@mrbrklyn.com> |
| Newsgroups | comp.lang.c++ |
| Subject | Re: Template argument determination |
| Date | Tue, 24 May 2011 02:50:07 +0000 (UTC) |
| Organization | PANIX Public Access Internet and UNIX, NYC |
| Lines | 128 |
| Message-ID | <irf6cv$at1$3@reader1.panix.com> (permalink) |
| References | <ireg6t$5nh$1@reader1.panix.com> |
| NNTP-Posting-Host | www2.mrbrklyn.com |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset=UTF-8 |
| Content-Transfer-Encoding | 8bit |
| X-Trace | reader1.panix.com 1306205407 11169 96.57.23.82 (24 May 2011 02:50:07 GMT) |
| X-Complaints-To | abuse@panix.com |
| NNTP-Posting-Date | Tue, 24 May 2011 02:50:07 +0000 (UTC) |
| X-Blackjet | Blackjet is a Yankee Fan |
| X-DRMisTHEFT | Use GNU Linux today |
| X-From | A Dark Cloud |
| X-LOCATION | Brooklyn NY - Forget abou' it! |
| X-NYLXS | Really - yah think computers are supposed to be broken? |
| User-Agent | Pan/0.133 (House of Butterflies) |
| Xref | x330-a1.tempe.blueboxinc.net comp.lang.c++:5389 |
Show key headers only | View raw
On Mon, 23 May 2011 20:31:25 +0000, Ruben Safir wrote:
> I'm having trouble understanding why my program is making a change in
> the argument type of my template class function
>
> template < class T >
> void List<T>::find_value(T val)
> {
> cursor() = front();
> while(cursor() != endd()){
> if (*(cursor()->value()) == val)
> return;
> else{
> cursor(cursor()->next());
> }
> }
> if(*(endd()->value()) == val)
> return;
> else{
> cursor() = 0; //park the cursor when nothing is found
> }
> }
>
>
> It's part of a List template class
>
> I call it from a templated fucntion in a different namespace as follows:
>
>
> tally = new chainlist::List<stats::Distribution<int> >; tallies = new
> chainlist::List< chainlist::List< stats::Distribution<int> > *>;
>
> std::cout << "The standard mean for picking 7 is ==> " <<
> stats::mean_list(tallies, 7 ) << std::endl;;
>
> template<typename T>
> float mean_list(chainlist::List<
> chainlist::List<stats::Distribution<T> >* > * tallies, T
> search_val){
> if(tallies->endd() == 0){
> std::cout << "Empty List" << std::endl; return 0.0;
> }
> int sum = 0;
> chainlist::List<stats::Distribution<T> > * dump; tallies->cursor
() =
> tallies->front(); while(tallies->cursor() != tallies->endd() ){
> //tallies->cursor()->value()->find_value(search_val);
dump =
> *(tallies->cursor()->value()); //dump->cursor() = dump-
>endd();
> //std::cout << "Testing\n" << *(dump->cursor()->value())
<<
> std::endl; dump->find_value(search_val);
> if(dump->cursor() != NULL)
> sum += dump->cursor()->value()->population();
> tallies->cursor(tallies->cursor()->next());
> }
> dump = *(tallies->cursor()->value()); dump->find_value
(search_val);
> if(dump->cursor() != 0)
> sum += dump->cursor()->value()->population();
> float tot = (float) sum/(float)(tallies->size()); std::cout <<
"Mean "
> << tot << " sum " << sum << " size " << tallies->size() <<
std::endl;
> return tot;
>
> }
>
> Now T is an integer for mean_list, and the first argument is of type
>
> chainlist::List< chainlist::List<stats::Distribution<int> >* > * when
> called and the second argument is of type int
>
> I then pass int search_val to method chainlist::List<T>::find_value(T)
> where T = stats::Distribution<T> (where T is an int) on this line:
>
> dump->find_value(search_val);
>
> and that's where the weirdness happens. I have a type mismatch since
> I'm sending by value an integer instead of a stats::Distribution<T>
>
> Instead the program calls the stat::Distribution constructor using 7,
> the value of search_val, as an argument redrawing search_val as type to
> a Distribution<int>
>
> :in gdb
>
>
> 312 void List<T>::find_value(T val) 313 {
> 314 cursor() = front();
> 315 while(cursor() != endd()){ 316 if
> (*(cursor()->value()) == val) 317 return;
> 318 else{
> 319 cursor(cursor()->next()); 320 }
> 321 }
> 322 if(*(endd()->value()) == val) 323 return;
> 324 else{
> 325 cursor() = 0; //park the cursor when nothing is found
> 326 }
> 327 }
>
> chainlist::List<stats::Distribution<int> >::find_value (this=0x804f008,
> val=...) at linklist.h:314 (gdb) ptype val
> type = class stats::Distribution<int> {
> public:
> chainlist::List<stats::Distribution<int> > *tally;
> private:
> int freq;
> int occurances;
>
> public:
> void Distribution(int, int);
> void Distribution(void);
> int description(void) const;
> int population(void) const;
> void increase_occ(void);
> void descrease_occ(void);
> int operator()(void);
> bool operator==(stats::Distribution<int> &); bool
> operator<(stats::Distribution<int> &); float
> stddev(chainlist::List<stats::Distribution<int> > *);
> }
>
>
> What rule for Template argument matching allows for this kind of magic?
i knew nobody would have an insight on this :(
Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar
Template argument determination Ruben Safir <ruben@mrbrklyn.com> - 2011-05-23 20:31 +0000
Re: Template argument determination Ruben Safir <ruben@mrbrklyn.com> - 2011-05-24 02:50 +0000
Re: Template argument determination Michael Doubez <michael.doubez@free.fr> - 2011-05-24 03:48 -0700
Re: Template argument determination "Balog Pal" <pasa@lib.hu> - 2011-05-24 13:06 +0200
Re: Template argument determination Ruben Safir <ruben@mrbrklyn.com> - 2011-05-24 14:44 +0000
Re: Template argument determination Ruben Safir <ruben@mrbrklyn.com> - 2011-05-24 15:04 +0000
Re: Template argument determination "Balog Pal" <pasa@lib.hu> - 2011-05-24 17:33 +0200
Re: Template argument determination Victor Bazarov <v.bazarov@comcast.invalid> - 2011-05-24 11:43 -0400
Re: Template argument determination "A. Bolmarcich" <aggedor@earl-grey.cloud9.net> - 2011-05-24 12:32 -0500
Re: Template argument determination Ruben Safir <ruben@mrbrklyn.com> - 2011-05-24 18:08 +0000
Re: Template argument determination "A. Bolmarcich" <aggedor@earl-grey.cloud9.net> - 2011-05-24 14:32 -0500
Re: Template argument determination Victor Bazarov <v.bazarov@comcast.invalid> - 2011-05-24 15:48 -0400
Re: Template argument determination "A. Bolmarcich" <aggedor@earl-grey.cloud9.net> - 2011-05-24 17:11 -0500
Re: Template argument determination Victor Bazarov <v.bazarov@comcast.invalid> - 2011-05-24 19:04 -0400
Re: Template argument determination "A. Bolmarcich" <aggedor@earl-grey.cloud9.net> - 2011-05-25 12:37 -0500
Re: Template argument determination Ruben Safir <ruben@mrbrklyn.com> - 2011-05-26 16:12 +0000
Re: Template argument determination "A. Bolmarcich" <aggedor@earl-grey.cloud9.net> - 2011-05-26 13:25 -0500
Re: Template argument determination Ruben Safir <ruben@mrbrklyn.com> - 2011-05-25 02:47 +0000
Re: Template argument determination "Balog Pal" <pasa@lib.hu> - 2011-05-25 10:06 +0200
Re: Template argument determination "A. Bolmarcich" <aggedor@earl-grey.cloud9.net> - 2011-05-25 12:40 -0500
csiph-web