1

boost::any 中的模板复制构造函数

我对 boost 的 any.hpp 中的这些代码感到困惑。

    template<typename ValueType>
    any(const ValueType & value)
      : content(new holder<
            BOOST_DEDUCED_TYPENAME remove_cv<BOOST_DEDUCED_TYPENAME decay<const ValueType>::type>::type
        >(value))
    {   
    }

    any(const any & other)
      : content(other.content ? other.content->clone() : 0)
    { 
    }

很明显,当我需要来自另一个对象的新对象时,对于 sencod 复制构造函数很有用。但是什么时候会执行第一个复制构造的呢?

4

1 回答 1

2

模板构造函数(不是复制构造函数)boost::any从 const 引用构造 a 到ValueType. 复制构造函数制作 any 的副本(在其中执行对象的多态克隆)。

以下是选择第一个表单的示例:

std::string s = "Hello, World";
boost::any a(s);  // template constructor selected here

boost::any b(a);  // copy constructor selected here.
于 2015-11-12T14:28:22.493 回答