C ++: miscelazione: boost :: qualsiasi typeid + puntatore +: clone di valore 'generico' se si tratta di un puntatore

StackOverflow https://stackoverflow.com/questions/4378568

Domanda

Ecco quello che vorrei fare:

  • Da un boost::any vorrei sapere che è un tipo di puntatore.
  • Se è un puntatore, devo clone di esso

Qualcosa di simile a questo:

boost::any value= new vector<string>();

if (typeid(value).IsPointerType())
{
  boost::any newValue = Clone(value);
}

Pensi che sia possibile?

Grazie per il vostro aiuto

NB: ho bisogno di questo per un quadro che dovrebbe essere in grado di inizializzare il valore di default

.
È stato utile?

Soluzione

È possibile utilizzare l'interfaccia type_info:

#include <boost/any.hpp>
#include <iostream>
#include <typeinfo>

using namespace std;

int main()
{
    boost::any intVal = 5;

    int* a = new int(6);
    boost::any ptrVal = a;

    cout << intVal.type().__is_pointer_p() <<endl;
    cout << ptrVal.type().__is_pointer_p() << endl; 

    return 0;
}

I ritorni

0
1

Altri suggerimenti

Si potrebbe usare qualcosa di simile (non ha compilarlo):

#include <boost/type_traits.hpp>

class any_p: public boost::any {
    const bool is_ptr_;
public:
    template<class T>
    any_p(T obj): boost::any(obj), is_ptr_(is_pointer<T>::value_type) {}
    const bool is_ptr() const { return is_ptr_; }
};
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top