Я пытаюсь выяснить, как многие классы Boost могут принимать сигнатуру функции в качестве аргумента шаблона, а затем "извлекать" оттуда тип результата, тип первого аргумента и т. Д.
template <class Signature>
class myfunction_ptr
{
Signature* fn_ptr;
public:
typedef /*something*/ result_type; // How can I define this?
typedef /*something*/ arg1_type; // And this?
};
Я знаю, что boost также обеспечивает более переносимую реализацию, используя аргумент шаблона для каждого аргумента функции, и это легко понять.Может кто-нибудь объяснить мне магию за этим?