У меня есть функция C ++, такая как
int f( const std::string &s, double d );
Теперь я хотел бы создать переменную, которая содержит указатель на f
. Эта переменная должна иметь правильный тип (int (*)( const std::string &, double )
- но я не хочу явно записывать этот тип. Я хотел бы вывести его из f
, чтобы не повторять сигнатуру типа. В конце концов, я хотел бы иметь возможность написать что-то вроде:
TypeOf<f>::Result x = f;
Чтобы добиться этого, я пытался сделать что-то вроде этого:
// Never implemented, only used to deduce the return type into something which can be typedef'ed
template <typename T> T deduceType( T fn );
template <typename T>
struct TypeOf {
typedef T Result;
};
// ...
TypeOf<deduceType(f)>::Result x = f;
Я надеялся, что, возможно, возвращаемый тип функции (deduceType
, в данном случае) может быть использован в качестве аргумента шаблона, но, увы - кажется, вы не можете этого сделать.
Кто-нибудь знает, как это сделать? Я ищу решение C ++ 03.