C ++: Mixing: boost :: + tout typeid + pointeur: clone valeur 'générique' si elle est un pointeur
Question
Voici ce que je voudrais faire:
- D'un
boost::any
je voudrais savoir est un type de pointeur. - S'il est un pointeur, je dois cloner
Quelque chose comme ceci:
boost::any value= new vector<string>();
if (typeid(value).IsPointerType())
{
boost::any newValue = Clone(value);
}
Pensez-vous que ce soit possible?
Merci pour votre aide
NB: Je besoin de cela pour un cadre qui devrait être en mesure d'initialiser la valeur par défaut
.La solution
Vous pouvez utiliser l'interface 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;
}
retour
0
1
Autres conseils
Vous pouvez utiliser quelque chose comme ça (ne pas compiler):
#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_; }
};
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow