473,397 Members | 1,960 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,397 software developers and data experts.

STL custom mem_fun

First, I describe my setup in 3 points. Then I describe what I want to do,
and describe the error I get.

1) I have a container GTTable container pointer to data (class GT *).

2) I made a template class based on mem_fun1, which in my version accepts 2
arguments in each call: one that is variable on each call (VA, typically
coming from the above container) and one that is fixed on each call (FA,
kind of constant provided by the user):

template<class R, class T, class VA, class FA>
class mem_fun1_arg_t : binary_function<T*, VA, R>
{
public:
explicit mem_fun1_arg_t(R (T::*p)(VA va, FA fa), FA fa) : pmf(p),
arg(fa) {}
R operator()(T* p, VA va) const {return (p->*pmf)(va, arg);}
private:
R (T::*pmf)(VA va, FA fa);
FA arg;
};

3) I paired the above template class with the following template function:

template<class R, class T, class VA, class FA>
inline static mem_fun1_arg_t<R, T, VA, FA> mem_fun1_arg(R (T::*p)(VA va, FA
fa), FA fa)
{
return mem_fun1_arg_t<R, T, VA, FA>(p, fa);
}

What I want to do is to find an element in GTTable that matches another
object's predicate, while providing a constant as the second argument during
the calls. Each call within the STL algorithm should look like:

ptrObject->Pred2(ptrGT, k)

Given ptrObject is of type "class CSomeClass", I use:

find_if(GTTable->begin(),
GTTable->end(),
bind1st(mem_fun1_arg(&CSomeClass::Pred2, k), ptrObject));

However, the compiler keeps complaining the same 7 errors in a row:

c:\program files\microsoft visual studio\vc98\include\functional(158): error
C2248: 'first_argument_type': cannot access public typedef declared in class
'binary_function<CSomeClass *,GT const *,bool>'
c:\program files\microsoft visual studio\vc98\include\functional(24): see
declaration of 'first_argument_type'
GTManager.cpp(396): see reference to class template instantiation
'binder1st<mem_fun1_arg_t<bool,CSomeClass,GT const *,int>>' being compiled

I tried another test with the standard mem_fun1 (derived from
binary_function) in order to verify if it was compiling:

find_if(GTTable->begin(),
GTTable->end(),
bind1st(mem_fun1(&CSomeClass::Pred1), ptrObject));

and it works (the compiler does not display any error message).

I wonder what is wrong in my template pair?
Is it my compiler? (MSVS6)

Note: I have the equivalent templates, adapted for unary_function, and there
no error.

Thanks for any help.
Jul 22 '05 #1
2 2300
On Tue, 10 Feb 2004 10:54:18 -0500 in comp.lang.c++, "Maitre Bart"
<le*****@cae.com> was alleged to have written:
template<class R, class T, class VA, class FA>
class mem_fun1_arg_t : binary_function<T*, VA, R>


Try:
class mem_fun1_arg_t : public binary_function<T*, VA, R>
~~~~~~

Jul 22 '05 #2

"David Harmon" <so****@netcom.com> wrote in message
news:40***************@news.west.earthlink.net...
On Tue, 10 Feb 2004 10:54:18 -0500 in comp.lang.c++, "Maitre Bart"
<le*****@cae.com> was alleged to have written:
template<class R, class T, class VA, class FA>
class mem_fun1_arg_t : binary_function<T*, VA, R>


Try:
class mem_fun1_arg_t : public binary_function<T*, VA, R>
~~~~~~


....

Thanks!
Jul 22 '05 #3

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

5
by: Old Wolf | last post by:
I have a member function that acts on an object. I would also like to have a member function that acts on a container of such objects, using std::for_each. I tried: #include <algorithm>...
2
by: Robbie Hatley | last post by:
I've got a function that I use a lot when making utility programs that need to do the same thing to every directory in a tree. Its prototype is: unsigned long int CursDirs (void Func(void)); ...
9
by: Mr X | last post by:
Can anyone tell how to fix the compile error for the program below? #include "iostream.h" #include <vector> #include <algorithm> #include <functional> #include <list> using namespace std;
13
by: Ioannis Vranos | last post by:
What is the exact difference between mem_fun and mem_fun_ref, since in all examples I looked at, they are used in exactly the same way? -- Ioannis Vranos http://www23.brinkster.com/noicys
4
by: ShaneG | last post by:
We have ptr_fun to handle functions, mem_fun to handle member functions that will be called through a pointer, and mem_fun_ref to handle member functions that will be called through a reference. ...
4
by: joseph cook | last post by:
I am getting a compile error on any compiler I try, so I know I have an error here. Can anyone see it? //includes class Foo { public: Foo(int a){m_hi = a;} int hi(){return m_hi;}
1
by: subramanian100in | last post by:
Consider the following program: #include <iostream> #include <string> #include <list> #include <algorithm> using namespace std; class Test
8
by: flopbucket | last post by:
Hi, I am having some problem using std::bind1st() and mem_fun. I want to bind member function calls to some kind of functor so it can be called later. The following works fine for me: ...
1
by: subramanian100in | last post by:
Suppose I have class WordAndLineNumbers { public: void print( ); // other member functions private: // data members
1
by: jonnyothan | last post by:
The following code isn't producing expected results: class Selectable { bool IsSelected() const; }; class Unit : public Selectable { };
0
by: Charles Arthur | last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.