そう言えばstd::pairというものがありましたね
多態性,もうちょっとまともに実装する方法があると思う…
コピーするのにshared_ptrを使うのはまずいのでは?