Storing a type in C++

后端 未结 8 1434
春和景丽
春和景丽 2020-12-05 17:41

Is it possible to store a type name as a C++ variable? For example, like this:

type my_type = int; // or string, or Foo, or any other type
void* data = ...;
         


        
8条回答
  •  鱼传尺愫
    2020-12-05 17:55

    Today I had a similar problem while coding:
    I had the need to store a polymoriphic data type (here named refobj) over wich call functions of the concrete classes implementing it. I need a solution that doesn't cast the variable explicitly because I need to reduce the amount of code.

    My solution (but I haven't tested it yet) looks similar to a previous answer. Actually is quite an experimental solution. It look like this...

    // interface to use in the function
    
    class Type   
    {
    public:
        virtual void* getObj()const=0;
    };
    
    // here the static_cast with the "stored" type
    
    template class TypeImpl : public Type
    {
    public:
        TypeImpl(T *obj) {myobj=obj;}
        virtual void* getObj()const{ return static_cast(myobj); }
    
    private: 
        T* myobj;
    };
    
    // here the type that will contain the polimorific type
    // that I don't want to cast explicitly in my code
    Type *refobj;
    
    // here the "user code "
    void userofTypes()
    {
        ( refobj->getObj() ).c_str(); 
        // getObj() should return a string type over which
        // calling string concrete functions ...let's try!
    }
    
    void main()
    {
        refobj=new TypeImpl < string > ( new string("hello") );
        userofTypes();
    }
    // it might seem absurd don't cast refobj explicitly, but of
    // course there are situation in which it can be useful!
    

提交回复
热议问题