<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://stlab.adobe.com/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://stlab.adobe.com/wiki/index.php?title=No_virtual_method_%22any%22_example&amp;feed=atom&amp;action=history</id>
		<title>No virtual method &quot;any&quot; example - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://stlab.adobe.com/wiki/index.php?title=No_virtual_method_%22any%22_example&amp;feed=atom&amp;action=history"/>
		<link rel="alternate" type="text/html" href="http://stlab.adobe.com/wiki/index.php?title=No_virtual_method_%22any%22_example&amp;action=history"/>
		<updated>2013-06-20T11:34:07Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.0</generator>

	<entry>
		<id>http://stlab.adobe.com/wiki/index.php?title=No_virtual_method_%22any%22_example&amp;diff=2443&amp;oldid=prev</id>
		<title>SeanParent: Created page with &quot; &lt;nowiki&gt; struct concept_t;  struct vtable_t {     void (*destruct)(const concept_t&amp;);     concept_t* (*copy)(const concept_t&amp;);     void (*print)(const concept_t&amp;); };  struc...&quot;</title>
		<link rel="alternate" type="text/html" href="http://stlab.adobe.com/wiki/index.php?title=No_virtual_method_%22any%22_example&amp;diff=2443&amp;oldid=prev"/>
				<updated>2013-01-15T06:13:54Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot; &amp;lt;nowiki&amp;gt; struct concept_t;  struct vtable_t {     void (*destruct)(const concept_t&amp;amp;);     concept_t* (*copy)(const concept_t&amp;amp;);     void (*print)(const concept_t&amp;amp;); };  struc...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt; &amp;lt;nowiki&amp;gt;&lt;br /&gt;
struct concept_t;&lt;br /&gt;
&lt;br /&gt;
struct vtable_t {&lt;br /&gt;
    void (*destruct)(const concept_t&amp;amp;);&lt;br /&gt;
    concept_t* (*copy)(const concept_t&amp;amp;);&lt;br /&gt;
    void (*print)(const concept_t&amp;amp;);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct concept_t {&lt;br /&gt;
    explicit concept_t(const vtable_t&amp;amp; x) : vtable_(&amp;amp;x) { }&lt;br /&gt;
    &lt;br /&gt;
    void destruct() const { vtable_-&amp;gt;destruct(*this); }&lt;br /&gt;
    concept_t* copy() const { return vtable_-&amp;gt;copy(*this); }&lt;br /&gt;
    void print() const { vtable_-&amp;gt;print(*this); }&lt;br /&gt;
&lt;br /&gt;
    const vtable_t* vtable_;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;typename T&amp;gt;&lt;br /&gt;
struct model : concept_t {&lt;br /&gt;
    explicit model(T&amp;amp; x) : concept_t(vtable_), data_(move(x)) { }&lt;br /&gt;
    static void destruct(const concept_t&amp;amp; x) { static_cast&amp;lt;const model&amp;amp;&amp;gt;(x).~model(); }&lt;br /&gt;
    static concept_t* copy(const concept_t&amp;amp; x) { return new model(static_cast&amp;lt;const model&amp;amp;&amp;gt;(x)); }&lt;br /&gt;
    static void print(const concept_t&amp;amp; x) { cout &amp;lt;&amp;lt; static_cast&amp;lt;const model&amp;amp;&amp;gt;(x).data_ &amp;lt;&amp;lt; endl; }&lt;br /&gt;
    &lt;br /&gt;
    static const vtable_t vtable_;&lt;br /&gt;
    &lt;br /&gt;
    T data_;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
template &amp;lt;typename T&amp;gt;&lt;br /&gt;
const vtable_t model&amp;lt;T&amp;gt;::vtable_ = {&lt;br /&gt;
    &amp;amp;model::destruct,&lt;br /&gt;
    &amp;amp;model::copy,&lt;br /&gt;
    &amp;amp;model::print&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class any {&lt;br /&gt;
public:&lt;br /&gt;
    template &amp;lt;typename T&amp;gt;&lt;br /&gt;
    any(T x) : object_(new model&amp;lt;T&amp;gt;(x)) { }&lt;br /&gt;
    ~any() { object_-&amp;gt;destruct(); operator delete(static_cast&amp;lt;void*&amp;gt;(object_)); }&lt;br /&gt;
    any(const any&amp;amp; x) : object_(x.object_-&amp;gt;copy()) { }&lt;br /&gt;
    &lt;br /&gt;
    friend inline void swap(any&amp;amp; x, any&amp;amp; y) { std::swap(x.object_, y.object_); }&lt;br /&gt;
    any&amp;amp; operator=(const any&amp;amp; x) { any tmp(x); swap(*this, tmp); return *this; }&lt;br /&gt;
    &lt;br /&gt;
    friend inline void print(const any&amp;amp; x) { x.object_-&amp;gt;print(); }&lt;br /&gt;
private:&lt;br /&gt;
    concept_t* object_;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>SeanParent</name></author>	</entry>

	</feed>