ラムダみたいにして匿名のクラスをなんとかして作れないんですか

struct Hoge {
Hoge(function<void(void)> h, function<void(void)> w): Hello(h), World(w) {}
function<void(void)> Hello;
function<void(void)> World;
};

template <class T> void Test(T obj) { obj.Hello(); obj.World(); }

int main(void) {
SmartPtr<X> obj(new X);
Test(Hoge(
[obj]() { obj->hello(); },
[obj]() { obj->world(); }));
return 0;
}

このコードからHogeクラスを削りたいんだけど