I have a small question: how do I find out what type a C++ pointer is?
I often use a small function in my console programs to gather input, which looks something like this:
void query(string what-to-ask, [insert datatype here] * input)
I would like to create a generic form, using a void pointer, but I can't cin a void pointer, so how to I find out it's type so I can cast it?
If you control the datatype yourself, I would probably make a class/struct that contains an enum of all of the data types you care about and pass that. You could then query the passed in pointer for it's datatype, and then cast appropriately.
IE ( pseudo code warning - treating this as a struct for now. )
class MyDataType {
enum aDataType type;
void * myData;
}
void query( string whatToAsk, MyDataType * pdata)
{
switch ( pdata.type) {
case integer:
int * workInt = (int * ) pdata;
do whatever you want to to get the data
break;
case someFunkyObject:
someFunkyObject pob = (SomeFunkyObject *) pdata;
Do whatever you want with the data.
etc.
}
}
You can't.
However, one alternative is to do away with void pointers, make everything derive from a common base class and use RTTI.
An example:
class Base
{
public:
virtual ~Base() {}
};
class Foo : public Base { /* ... */ };
void SomeFunction(Base *obj)
{
Foo *p = dynamic_cast<Foo*>(obj);
if (p)
{
// This is of type Foo, do something with it...
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With