Hi,
I have a feeling that OOP can be done in C also. I have used a
structure to hold member variables and function pointers. The
structure is used as a class to create new 'objects'. But I hit a
problem. How do I access these 'member variables' from the function
that is pointed to by the function pointer in the structure.
I would really appreciate help with this and a code sample will be
wonderful.
Thanks in advance,
Prashanth Ellina
Nov 14 '05
70 2922
"Malcolm" <ma*****@55bank .freeserve.co.u k> wrote in message
news:ca******** **@newsg2.svr.p ol.co.uk... "E. Robert Tisdale" <E.************ **@jpl.nasa.gov > wrote I merely asked for an example of a function pointer that is not used as a callback function. So far, you have failed to provide one. OK here's an example.
/* return the maximum value of an stdlib maths function that takes one
scalar as its argument. */ double maximum( double (*fptr)(double x) ) { if( fptr == sin) return 1.0; if(fptr == sqrt) return DBL_MAX; if(fptr == asin) return 3.14 * 2.0;
/* add extra for the other function in the maths library */ }
Good One Malcolm!
Almost made me wet my pants.
I've been absent from the newsgroups for a time (unemployment can do that),
but was following this thread with some uneasy interest.
At first I thought, "of course function pointers aren't used only for
callback functions." But after reading and thinking, I decided that
ultimately,
if that function pointer is every actually used it is effectively "calling
back" to
the function it points to.
However, your fine example shows that if we use the function pointers only
as pointers, there is no "calling", hence no "callback" happening.
Which brings me back to one observation, though:
function pointers are NEVER callback functions
They are POINTERS TO callback functions.
let me slip back into my teapot now.
Rufus
E. Robert Tisdale wrote: Arthur J. O'Dwyer wrote:
These are functions, but they are not callback functions.
That's a lie.
Not every function is a callback function. Some programs do not use callback functions at all.
I never said different.
Stephen's program appears to be one of them.
Stephen Sprunk's does, in fact, use callback functions. It is a classical example of the use of callback functions.
You have never provided a single reason why you believe that these are not callback functions. I submit that the reason is that you can't and that you know that you can't. You are simply trolling.
Please go away troll.
Bob,
(Can I call you Bob?)
You sound like a 12-year old.
Why don't you take a break from Usenet, and come back next year.
In article <ca**********@n ntp1.jpl.nasa.g ov>,
E. Robert Tisdale <E.************ **@jpl.nasa.gov > wrote: It's not usually used for the case where a library gives you a function to call.
I never argued that the callback function was provided by the library.
Surely in the method case the object is analogous to the library. The
object provides a function pointer for you to call.
To regard this as a callback means considering "you" to be the object,
and the program using the object to be in the role of the library,
which is the wrong way round.
-- Richard
Richard Tobin wrote: E. Robert Tisdale wrote:
It's not usually used for the case where a library gives you a function to call. I never argued that the callback function was provided by the library.
Surely, in the method case,
I'm not sure what you mean by "method case".
the object is analogous to the library.
No.
You might draw that analogy for an object of the *base* type
but *not* for an object of a type *derived* from the base type
by you -- the user of the base class (library).
The object provides a function pointer for you to call.
To regard this as a callback means considering "you" to be the object,
Well, it means the *you* provided the object which contains a pointer
to the callback function or to a table which contains pointers
to callback functions.
and the program using the object to be in the role of the library, which is the wrong way round.
I think that you are confused.
Try giving us an example.
In article <ec************ *************** ***@news.terane ws.com>, "Rufus V. Smith" <no****@nospam. com> writes: At first I thought, "of course function pointers aren't used only for callback functions." But after reading and thinking, I decided that ultimately, if that function pointer is every actually used it is effectively "calling back" to the function it points to.
When function pointers are used to implement a jump table, in what sense
are calls through them "back" to the functions they point to?
For example:
----- snip -----
#include <stdio.h>
void foo(void) { puts("foo"); }
void bar(void) { puts("bar"); }
void (*fptrs[])(void) = {foo, bar};
int main(void)
{
int c, i;
while ((c = getchar()) != EOF) {
switch (c) {
case 'f': i = 0; break;
case 'b': i = 1; break;
default: i = -1; break;
}
if (i >= 0 && i < sizeof fptrs / sizeof fptrs[0])
fptrs[i]();
}
return 0;
}
----- snip -----
That's obviously a trivial example, but it's no different in principle
than a real program that uses an array of function pointers to perform
various operations based on input. Such programs typically compute an
index into the array, then call the function corresponding to that
index. It's equivalent to having a switch for each possible index
value and an explicit call to the corresponding function, but tidier.
When foo or bar is called, in what sense is that call "back" to
something? "Back" from where?
A function F acts as a callback when it belongs to domain A, domain A
makes F available to domain B, domain A calls into domain B, and
domain B calls F. Callback is a role that a function can satisfy. It
has nothing to do with function pointers whatsoever.
--
Michael Wojcik mi************@ microfocus.com
Duck: No secret what's worth a hoot ought to be kept quiet.
Pogo: Secrets is usually perty doggone fascinatin'.
Duck: Egg-zackly ... it's completely illogical to keep a secret secret.
Pogo: An' unfair. -- Walt Kelly
"E. Robert Tisdale" <E.************ **@jpl.nasa.gov > wrote in message
news:ca******** **@nntp1.jpl.na sa.gov... Something that calls itself Christian Bau wrote:
A function pointer is by definition a callback function.
You are a liar. I never said any such thing. I merely asked for an example of a function pointer that is not used as a callback function. So far, you have failed to provide one.
Here's a crumb for the troll:
void (*fp)(void); /* not used as a callback function */
Also note that no function pointer can be used as a
callback function, since a pointer is not a function,
nor is it convertible to one.
-Mike
"Prashanth Ellina" <pr************ *@hotpop.com> wrote in message
news:28******** *************** ***@posting.goo gle.com... "Mike Wahler" <mk******@mkwah ler.net> wrote in message
news:<VN******* ***********@new sread1.news.pas .earthlink.net> ... #include <stdio.h>
struct S { int member; void (*fp)(struct S *); };
void func(struct S *param) { printf("%d\n", param->member); }
int main() { struct S object = {42, func}; func(&object); /* prints 42 */
shouldn't the above line be, object.fp(&obje ct); ?
Yes, to do it "OO style". Sorry about the typo.
However, the original form is still valid code
(defeating the purpose of the example,
but causing me to take a clean compile as
'what I meant'. :-)).
-Mike
Michael Wojcik wrote: Rufus V. Smith writes:
At first I thought, "of course function pointers aren't used only for callback functions." But after reading and thinking, I decided that ultimately, if that function pointer is every actually used it is effectively "calling back" to the function it points to. When function pointers are used to implement a jump table, in what sense are calls through them "back" to the functions they point to?
For example:
----- snip ----- #include <stdio.h>
// domain A: void foo(void) { puts("foo"); } void bar(void) { puts("bar"); }
void (*fptrs[])(void) = {foo, bar};
// domain B: int main(int argc, char* argv[]) { int c = EOF;
while ((c = getchar()) != EOF) { int i = -1; switch (c) { case 'f': i = 0; break; case 'b': i = 1; break; default: i = -1; break; } if (0 <= i && i < sizeof fptrs/sizeof fptrs[0]) fptrs[i](); }
return 0; } ----- snip -----
That's obviously a trivial example, but it's no different in principle than a real program that uses an array of function pointers to perform various operations based on input.
Except that is lacks any motivation for doing so
besides to help you make your point.
Such programs typically compute an index into the array, then call the function corresponding to that index. It's equivalent to having a switch for each possible index value and an explicit call to the corresponding function, but tidier.
When foo or bar is called, in what sense is that call "back" to something? "Back" from where?
A function F acts as a callback when it belongs to domain A, domain A makes F available to domain B, domain A calls into domain B, and domain B calls F.
The problem with your example is that main(void) is a function
that could be viewed an domain B.
You could "disambigua te" this by moving
void (*fptrs[])(void) = {foo, bar};
inside the definition of function main(void).
Callback is a role that a function can satisfy. It has nothing to do with function pointers whatsoever.
Correct.
In this example:
#include <stdio.h>
void f(const void (*fptrs[])(void)) { // domain B
int c = EOF;
while ((c = getchar()) != EOF) {
int i = -1;
switch (c) {
case 'f': i = 0; break;
case 'b': i = +1; break;
default: i = -1; break;
}
if (0 <= i && i < sizeof fptrs/sizeof fptrs[0])
fptrs[i]();
}
}
void foo(void) { puts("foo"); }
void bar(void) { puts("bar"); }
int main(int argc, char* argv[]) { // domain A
const
void (*fptrs[])(void) = {foo, bar};
f(fptrs);
return 0;
}
foo(void) and bar(void) *are* callback functions
called back from function f(const void (*fptrs[])(void))
through the fptrs "jump table"
supplied by function main(int, char**).
In article <ca**********@n ntp1.jpl.nasa.g ov>, "E. Robert Tisdale" <E.************ **@jpl.nasa.gov > writes: Michael Wojcik wrote:
That's obviously a trivial example, but it's no different in principle than a real program that uses an array of function pointers to perform various operations based on input. Except that is lacks any motivation for doing so besides to help you make your point.
A fascinating observation. What part of the word "example" do you
not understand?
Or are you claiming that there are no real, nontrivial programs
which use this mechanism? If so, kindly prove it. A function F acts as a callback when it belongs to domain A, domain A makes F available to domain B, domain A calls into domain B, and domain B calls F.
The problem with your example is that main(void) is a function that could be viewed an domain B.
No it can't, since in my example nothing calls main except the
environment. The environment is not part of the program. Thus
there is no domain A in the program which can invoke main; thus
main cannot be domain B.
You could "disambigua te" this by moving
void (*fptrs[])(void) = {foo, bar};
inside the definition of function main(void).
This changes nothing. foo and bar are still not callbacks,
because they are not called "back" into anywhere. They are
called "forward", just as if they were called directly rather
than through a function pointer.
The jump table example is precisely an example of using a
function pointer for a "forward" call.
--
Michael Wojcik mi************@ microfocus.com
Proverbs for Paranoids, 2: The innocence of the creatures is in inverse
proportion to the immorality of the Master. -- Thomas Pynchon This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: William C. White |
last post by:
Does anyone know of a way to use PHP /w Authorize.net AIM without using
cURL? Our website is hosted on a shared drive and the webhost company
doesn't installed additional software (such as cURL) on the server because
of that. Our site will have an SSL certificate next week, so I would like
to use AIM instead of SIM, however, I don't know how to send data via POST
over https and recieve data from the Authorize.net server over an https...
|
by: Albert Ahtenberg |
last post by:
Hello,
I don't know if it is only me but I was sure that header("Location:url")
redirects the browser instantly to URL, or at least stops the execution of
the code. But appearantely it continues to execute the code until the
browser send his reply to the header instruction. So an exit(); after each
redirection won't hurt at all
|
by: James |
last post by:
Hi,
I have a form with 2 fields.
'A'
'B'
The user completes one of the fields and the form is submitted.
On the results page I want to run a query, but this will change
subject to which field is completed.
|
by: Ollivier Robert |
last post by:
Hello,
I'm trying to link PHP with Oracle 9.2.0/OCI8 with gcc 3.2.3 on a Solaris9
system. The link succeeds but everytime I try to run php, I get a SEGV from
inside the libcnltsh.so library.
354 roberto@ausone:Build/php-4.3.2> ldd /opt/php4/bin/php
libsablot.so.0 => /usr/local/lib/libsablot.so.0
libstdc++.so.5 => /usr/local/lib/libstdc++.so.5
libm.so.1 => /usr/lib/libm.so.1
|
by: Richard Galli |
last post by:
I want viewers to compare state laws on a single subject.
Imagine a three-column table with a drop-down box on the top. A viewer
selects a state from the list, and that state's text fills the column below.
The viewer can select states from the drop down lists above the other two
columns as well. If the viewer selects only one, only one column fills. If
the viewer selects two states, two columns fill. Etc.
I could, if appropriate, have...
| |
by: Albert Ahtenberg |
last post by:
Hello,
I have two questions.
1. When the user presses the back button and returns to a form he filled
the form is reseted. How do I leave there the values he inserted?
2. When the user comes back to a page where he had a submitted POST data
the browser keeps telling that the data has expired and asks if repost. How
to avoid that? I tried registering all POST and GET vars as SESSION vars but
|
by: inderjit S Gabrie |
last post by:
Hi all
Here is the scenerio ...is it possibly to do this...
i am getting valid course dates output on to a web which i have designed
....all is okay so far , look at the following web url
http://www.mis.gla.ac.uk/biquery/training/
but each of the courses held have maximum of 8 people that could be
|
by: Jack |
last post by:
Hi All,
What is the PHP equivilent of Oracle bind variables in a SQL statement, e.g.
select x from y where z=:parameter
Which in asp/jsp would be followed by some statements to bind a value to :parameter
I dont like the idea of making the SQL statement on the fly without binding parameters as I
dont want a highly polluted SQL cache.
|
by: Sandwick |
last post by:
I am trying to change the size of a drawing so they are all 3x3.
the script below is what i was trying to use to cut it in half ... I
get errors.
I can display the normal picture but not the results of the picture
half the size. The PHP I have installed support 1.62 or higher. And
all I would like to do is take and image and make it fit a 3x3.
Any suggestions to where I should read or look would be appreciated.
|
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, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look !
Part I. Meaning of...
|
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 effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it.
First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
| |
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
|
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 protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
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 presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules.
He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms.
Adolph will...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
| |
by: muto222 |
last post by:
How can i add a mobile payment intergratation into php mysql website.
| |