473,804 Members | 2,164 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

OOP in C!

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
Nov 14 '05 #61
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.

Nov 14 '05 #62
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
Nov 14 '05 #63
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.
Nov 14 '05 #64

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
Nov 14 '05 #65

"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
Nov 14 '05 #66
"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
Nov 14 '05 #67
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**).
Nov 14 '05 #68

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
Nov 14 '05 #69
I would really appreciate help with this and a code sample will be
wonderful.


http://groups.google.com/groups?selm...tbi_s02&rnum=4

There ya go.
Nov 14 '05 #70

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

Similar topics

3
11256
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...
2
5849
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
3
23045
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.
0
8502
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
1
8614
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...
4
18312
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
1
6877
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
2
31451
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.
3
23607
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.
0
9714
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, 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...
0
9594
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,...
0
10350
jinu1996
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...
0
10096
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 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...
0
9174
agi2029
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...
1
7638
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 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...
0
5673
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
4311
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
2
3834
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

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.