Как я могу создать переменную с тем же типом, что и данная функция?

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

8
задан Frerich Raabe 11 May 2011 в 09:53
поделиться