64,662
社区成员
发帖
与我相关
我的任务
分享
#include <memory>
#include <iostream>
#include <map>
class Var
{
public:
Var() : m_val() { }
template<typename T>
Var(T val) { m_val = std::make_shared<T>(val); }
template<typename T>
void setValue(T val) { m_val = std::make_shared<T>(val); }
template<typename T>
T value() { return static_cast<T>(*static_cast<T*>(m_val.get())); }
private:
std::shared_ptr<void> m_val;
};
int _tmain(int argc, _TCHAR* argv[])
{
Var x(1);
std::cout << x.value<int>();
std::map<std::string, Var> voidMap;
voidMap.insert(std::make_pair("1", Var("Hello!")));
voidMap.insert(std::make_pair("2", Var(12)));
voidMap.insert(std::make_pair("3", Var(1.0f)));
Var* val = new Var(true);
voidMap.insert(std::make_pair("4", val));
std::cout << voidMap["1"].value<const char*>();
std::cout << voidMap["2"].value<int>();
std::cout << voidMap["3"].value<float>();
std::cout << voidMap["4"].value<Var*>()->value<bool>();
delete val;
system("pause");
return 0;
}
// See http://www.boost.org/libs/any for Documentation.
#ifndef BOOST_ANY_INCLUDED
#define BOOST_ANY_INCLUDED
#if defined(_MSC_VER)
# pragma once
#endif
// what: variant type boost::any
// who: contributed by Kevlin Henney,
// with features contributed and bugs found by
// Antony Polukhin, Ed Brey, Mark Rodgers,
// Peter Dimov, and James Curran
// when: July 2001, April 2013 - May 2013
#include <algorithm>
#include "boost/config.hpp"
#include <boost/type_index.hpp>
#include <boost/type_traits/remove_reference.hpp>
#include <boost/type_traits/decay.hpp>
#include <boost/type_traits/remove_cv.hpp>
#include <boost/type_traits/add_reference.hpp>
#include <boost/type_traits/is_reference.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/throw_exception.hpp>
#include <boost/static_assert.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/mpl/if.hpp>
namespace boost
{
class any
{
public: // structors
any() BOOST_NOEXCEPT
: content(0)
{
}
上面是 any.hpp 的代码片段, 看起来就不像是只包含一个文件就能使用的啊....