I have a method that has a void pointer as argument. In the body of the method I want to write some code that should execute only if the void pointer is convertible to a specific type of pointer(in my case it is a card*). How do I check if the card is convertible to card pointer?
            Asked
            
        
        
            Active
            
        
            Viewed 1,036 times
        
    1
            
            
        - 
                    Do you mean: you want to know if the pointer *actually points to* a `card` object ? In many cases you can convert a pointer but not then use the pointer after conversion. – M.M Apr 06 '16 at 01:20
 
1 Answers
1
            
            
        There is no C++ language feature to do this.
[Don't do this] One possible approach is to make the void* point to a class of a specific known type that stores type information and another void*. Then you can convert the first void* to the type-containing data type, determine if the type is what you want, and then take the nested void* and cast it to the desired type.
All that said, what's the real problem you're trying to solve? There's probably a C++-idiomatic approach to that.
        Mark B
        
- 95,107
 - 10
 - 109
 - 188
 
- 
                    Including your own type information may be the only way to do this. If you need the `void*`, then you always have to assume you were given the right data type. http://stackoverflow.com/questions/4131091/dynamic-cast-from-void – Kyle A Apr 06 '16 at 01:23
 - 
                    While it is best to avoid `void*`, sometimes you need to use it to provide a hook. For example, when I write multi-threaded code, `pthread_create` expects a function pointer of type `void *(*func)(void*)`, because it can't know what types I may want to use. (Yes, I use pthreads, the compiler I have to use doesn't support c++11.) – Kyle A Apr 06 '16 at 01:32
 - 
                    @KyleA: That's because `pthreads` is C, not even C++98. In C++98, you can have `class Runnable { virtual void run() = 0; virtual ~Runnable();}`. – MSalters Apr 06 '16 at 09:34