C++相談室 part47
■ このスレッドは過去ログ倉庫に格納されています
0490デフォルトの名無しさん
2006/03/01(水) 20:24:51struct base{
struct inner_base{
virtual inner_base*clone(){return new inner_base;};
virtual ~inner_base(){}
};
template<typename T>
struct inner_derived : inner_base{
typedef T member_type;
T value;
inner_derived(const T&value):value(value){}
inner_derived*clone(){return new inner_derived(value);}
};
inner_base*value;
template<typename T>base(const T&value):value(new inner_derived<T>(value)){}
base(const base&value):value(value.value->clone()){}
base&operator=(base b){swap(b);return *this;}
base():value(new inner_base){}
~base(){delete value;}
void swap(base&b){inner_base*p=value;value=b.value;b.value=p;}
template<typename T>operator T&(){return dynamic_cast<inner_derived<T>&>(*value).value;}
};
#include<iostream>
int main(){
base tmp=1;
int value = tmp;
std::cout << value;
}
■ このスレッドは過去ログ倉庫に格納されています