template <class T, class A1> T make_pod(const A1 &a1) { T t = { a1 }; return t; }
template <class T, class A1, class A2> T make_pod(const A1 &a1, class A2 &a2) { T t = { a1, a2 }; return t; }
・・・

↑のようなコードを十分な引数数に対応できるように(20もあれば十分すぎると思う)、スクリプトに吐かせて

func(make_pod<hoge>(a1, a2, a3));

とするとか。コンストラクタを作った場合よりコピーコストが増えるのが気になるけどクライアントコード自体は1行になるよ