|
The problems are:
1.virtual void operator()(const char* string)=0; // call using operator
2.template class TSpecificFunctor : public TFunctor
//TFunctor is a class
3.TSpecificFunctor specFuncA(&objA, TClassA::Display);
4.TFunctor** vTable = new TFunctor*[2];
Can you tell me their meaning?
Thank you again
The following codes you can refer:
// This code was compiled and tested with Borland C++ Builder 5.0. Let me know
// if there is something I should mention for the use with other compilers.
#pragma hdrstop // Borland C++ Builder specific
#pragma argsused // do.
#include // due to: cout
// abstract base class
class TFunctor
{
public:
// two possible functions to call member function. virtual cause derived
// classes will use a pointer to an object and a pointer to a member function
// to make the function call
virtual void operator()(const char* string)=0; // call using operator
virtual void Call(const char* string)=0; // call using function
};
// derived template class
template class TSpecificFunctor : public TFunctor
{
private:
void (TClass::*fpt)(const char*); // pointer to member function
TClass* pt2Object; // pointer to object
public:
// constructor - takes pointer to an object and pointer to a member and stores
// them in two private variables
TSpecificFunctor(TClass* _pt2Object, void(TClass::*_fpt)(const char*))
{ pt2Object = _pt2Object; fpt=_fpt; };
// override operator "()"
virtual void operator()(const char* string)
{ (*pt2Object.*fpt)(string);}; // execute member function
// override function "Call"
virtual void Call(const char* string)
{ (*pt2Object.*fpt)(string);}; // execute member function
};
//-----------------------------------------------------------------------------------------
// 4.3 Example of How to Use Functors
// dummy class A
class TClassA{
public:
TClassA(){};
void Display(const char* text) { cout << text << endl; };
/* more of TClassA */
};
// dummy class B
class TClassB{
public:
TClassB(){};
void Display(const char* text) { cout << text << endl; };
/* more of TClassB */
};
// main program
int main(int argc, char* argv[])
{
// 1. instantiate objects of TClassA and TClassB
TClassA objA;
TClassB objB;
// 2. instantiate TSpecificFunctor objects ...
// a ) functor which encapsulates pointer to object and to member of TClassA
TSpecificFunctor specFuncA(&objA, TClassA::Display);
// b) functor which encapsulates pointer to object and to member of TClassB
TSpecificFunctor specFuncB(&objB, &TClassB::Display);
// 3. create array with pointers to TFunctor, the base class and ...
TFunctor** vTable = new TFunctor*[2];
// ... assign functor addresses to the function pointer array
vTable[0] = &specFuncA;
vTable[1] = &specFuncB;
// 4. use array to call member functions without the need of an object
vTable[0]->Call("TClassA::Display called!"); // via function "Call"
(*vTable[1]) ("TClassB::Display called!"); // via operator "()"
// 5. release
delete[] vTable;
// hit enter to terminate
cout << endl << "Hit Enter to terminate!" << endl;
cin.get();
return 0;
}
|
|
|
|
|
Aleon666 wrote:
virtual void operator()(const char* string)=0; // call using operator
This is an abstract virtual function. The class containing an abstract virtual function cannot be instantiated, and is intended to be a base class.
Aleon666 wrote:
template class TSpecificFunctor : public TFunctor
I guess this should look like this:
template<class TClass> class TSpecificFunctor : public TFunctor
This is a declaration of a template class. I think you better read on templates in MSDN.
Aleon666 wrote:
TSpecificFunctor specFuncA(&objA, TClassA::Display);
I again guess it should be:
TSpecificFunctor<TClassA> specFuncA(&objA, TClassA::Display);
This line creates an instance of TSpecificFunctor object, passing TClassA as a template argument, and (&objA, TClassA::Display) as constructor arguments.
Aleon666 wrote:
TFunctor** vTable = new TFunctor*[2];
This creates an array which contains two pointers to TFunctor objects. This array is then initialized with two created functors: specFuncA and specFuncB .
HTH
Alexandre Kojevnikov
MCAD charter member
Leuven, Belgium
|
|
|
|
|
|
Hi! Is it possible for a method to return a struct? like:
Thanks!
If not, how do i make a method return data with multiple data types?
Thanks again!
"To teach is to learn twice"
|
|
|
|
|
daljv wrote:
Is it possible for a method to return a struct?
Yes
struct Data
{
int i;
string bar;
}
public Data DoStuff()
{
Data d = new Data();
d.i = 1;
d.bar = "Hello";
return d;
} Something like that will work
James
"I despise the city and much prefer being where a traffic jam means a line-up at McDonald's"
Me when telling a friend why I wouldn't want to live with him
|
|
|
|
|
You beat me to it by a minute
*goes back to work*
|
|
|
|
|
But yours will compile
James
"I despise the city and much prefer being where a traffic jam means a line-up at McDonald's"
Me when telling a friend why I wouldn't want to live with him
|
|
|
|
|
hehehe..
|
|
|
|
|
While your example struct seems to be missing, the answer is yes. A method can return void or any object you want it to - naturally this includes your own structs and classes.
In this example I'll create a struct to hold an error message (MyError) and use MyMethod to return it:
public struct MyError<br />
{<br />
public bool HasErrors;<br />
public string ErrorMessage;<br />
<br />
public MyError(bool hasErrors, string errorMessage)<br />
{<br />
HasErrors = hasErrors;<br />
ErrorMessage = errorMessage;<br />
}<br />
}
and now a method that returns it:
public class MyClass<br />
{<br />
public MyError CheckForErrors(bool someCondition)<br />
{<br />
if(!someCondition)<br />
{<br />
return new MyError(true, "Errors ocurred");<br />
}<br />
else<br />
{<br />
return new MyError(false, "She's Apples Mate");<br />
}<br />
}<br />
}
|
|
|
|
|
lol, leave it to me to forget the important things, like visibility modifiers
James
"I despise the city and much prefer being where a traffic jam means a line-up at McDonald's"
Me when telling a friend why I wouldn't want to live with him
|
|
|
|
|
I'm back at work, really
|
|
|
|
|
yep. thanks a lot. Thats a very good explanation.
"To teach is to learn twice"
|
|
|
|
|
the problem is when i draw a column using the Rect method at for example x = 10 y = 10
and i print the text inputting these same values ...but the text is printed at the left ...i want it to be printed on the right ...like right align..Thanks
|
|
|
|
|
When you use the DrawString method you should specify a StringFormat object with the Alignment property set to StringAlignment.Far .
I think that will do what you want.
James
"I despise the city and much prefer being where a traffic jam means a line-up at McDonald's"
Me when telling a friend why I wouldn't want to live with him
|
|
|
|
|
I got some info that might help u guys ..remeber i said my accounting software was throwing a clr exception 80004005 and crashes ...well it happens when u execute it with the Compatability set to windows98/me or simply by executing the programm on a win9x box..I just found out that all my C# programms give the same error !!! Thats preetty confusing to me ..It means my compiler is giving me the problem ??
Might be u guys can help me out on that !!;)
|
|
|
|
|
Confuses the heck out of me also. All my c# apps crash when compatibily is set to 98
|
|
|
|
|
what i ment was the compatability option for windowsXP . When trying to run the app under the win9x/me option it crashs ..
|
|
|
|
|
Yeah - i know. Exactly that.
Well it doesn't really matter much for me anyway.
|
|
|
|
|
I'm going to release an application with multiple customized versions. When the user inserts the CD into the drive I need a .net application to be able to run automatically. Of course this is not going to work if the framework is not installed. Does anyone know of a way of running a .net application without the framework? Something like static linking in MFC?
There must be a solution to this. (Other than installing the framework)
|
|
|
|
|
You have to make a C++ program as an autorun app, not a C# application.
"Blessed are the peacemakers, for they shall be called sons of God." - Jesus
"You must be the change you wish to see in the world." - Mahatma Gandhi
|
|
|
|
|
I'm think i might have to, but I was really hoping i could do it my way in C#
|
|
|
|
|
A couple of months back the guys at Thinstall were discussing ways to include the .Net framework libraries needed to run a .Net app with the app itself, using their utility. The idea was to make a .Net app run independantly from the .Net framework - which seems to be what you want to do.
I'm not sure how far they got with it, or exactly what the legal ramifications would be, but you might be able to get more info from their website:
www.thinstall.com[^]
|
|
|
|
|
I took a looks at the website and it doesn't look too promising. All they have right now is have the program fail gracefully and tell the user that they need the framework instead of saying that the .net core dll is missing.
Still, thanks a bunch for the advice.
|
|
|
|
|
|
how can i edit,save and delete data in a datagrid which datasource is a datable in a dataset,whick will make it look like microsoft access
|
|
|
|