2016-06-16 2 views
0

Существует немного «сложный» код, в котором класс A хранит указатель на функцию (инициализируется как F1). Функция F1 вызывает F2 и передает F3 в качестве параметра шаблона.C++, указатель на функцию + шаблоны функций

template <typename T> 
using cfunction = T(*)(T, T); 

template <typename T> 
T F3(const T a, const T b) {return a * b;} 

template <typename T, typename Function> 
T F2(Function func, const T a, const T b) {return func(a, b);} 

template <typename T> 
T F1(const T a, const T b) { return F2(F3<T>(a, b), a, b);} 

template <typename T> 
class A { 
    public: 
    cfunction <T> X; 

    A() : X(&F1) {} 
    A(const cfunction <T> &pX) : X(pX) {}; 
    virtual ~A() {}; 
}; 

int main() { 
    A<double> b(F1<double>); 
    return 0; 
} 

К сожалению, возникает следующая ошибка:

error: 'func' cannot be used as a function 

Где проблема? Есть ли также способ избежать передачи a, b как параметров F2 и F3? Спасибо за вашу помощь ...

ответ

2

Изменить на:

template <typename T> 
T F1(const T a, const T b) { return F2(F3<T>, a, b);} 
             ^^^^^ 
+0

Благодарим за быстрое решение :-) – justik

Смежные вопросы