add template constructor