template <typename T>
class Action
{
typedef int CommandFunction;
Action(CommandFunction cf, T* t) {}
};
class ObjectController
{
public:
template<template<class> class Action, class T>
Action<T>* createAction(typename Action<T>::CommandFunction cf, T * t);
};
template<template<class> class Action, class T>
Action<T> * ObjectController::createAction(typename Action<T>::CommandFunction cf, T * t)
{
return new Action<T>(cf, t);
}
int main()
{
ObjectController oc;
}
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIEFjdGlvbgp7CiAgICB0eXBlZGVmIGludCBDb21tYW5kRnVuY3Rpb247CgogICAgQWN0aW9uKENvbW1hbmRGdW5jdGlvbiBjZiwgVCogdCkge30KfTsKCmNsYXNzIE9iamVjdENvbnRyb2xsZXIKewpwdWJsaWM6CiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xhc3MgQWN0aW9uLCBjbGFzcyBUPgogICAgQWN0aW9uPFQ+KiBjcmVhdGVBY3Rpb24odHlwZW5hbWUgQWN0aW9uPFQ+OjpDb21tYW5kRnVuY3Rpb24gY2YsIFQgKiB0KTsKfTsKCnRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBBY3Rpb24sIGNsYXNzIFQ+CkFjdGlvbjxUPiAqIE9iamVjdENvbnRyb2xsZXI6OmNyZWF0ZUFjdGlvbih0eXBlbmFtZSBBY3Rpb248VD46OkNvbW1hbmRGdW5jdGlvbiBjZiwgVCAqIHQpCnsKICAgIHJldHVybiBuZXcgQWN0aW9uPFQ+KGNmLCB0KTsKfQoKaW50IG1haW4oKQp7CiAgICBPYmplY3RDb250cm9sbGVyIG9jOwp9