C ++:混合:boost :: any + typeid + pointer:如果它是指针,则克隆'generic'值

时间:2010-12-07 15:48:18

标签: c++ boost clone typeid typeinfo

以下是我想做的事情:

  • boost::any我想知道它是指针类型。
  • 如果是指针,我必须克隆它

这样的事情:

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

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

你认为有可能吗?

感谢您的帮助

注意:我需要这个能够初始化默认值的框架。

2 个答案:

答案 0 :(得分:1)

你可以使用这样的东西(没有编译它):

#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_; }
};

答案 1 :(得分:0)

您可以使用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;
}

返回

0
1