У меня есть функция 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.