2

C++ 2003에서 typedef는 완전한 유형에서만 사용될 수 있습니다. 구문C++, 새 유형으로 함수에 대한 포인터

를 사용하여 C++ 2003 또는 C + +0에서이 문제를 회피하는 방법을 어떤 방법이 있나요

template <typename T> 
typedef T(*f_function)(T, T, T); 

: 따라서, 기능과 유형으로 일반 T에 대한 포인터를 만들 수 없습니다입니다

using (*f_function)(T, T, T); // something like that 

나는 클래스 멤버

template <typename T> 
class A 
{ 
public: 
    f_function fff; 

    A() {fff = NULL;} 
    A(f_function pf){fff = &pf;} 
}; 

template <typename T> 
T f1(T x, T y, T z) { return x + y + z;} 

template <typename T> 
T f2(T x, T y, T z) { return x - y - z;} 

같은 기능 FFF 포인터를 사용하고 생성자에서 값을 초기화하고 싶습니다. 그 후 :

int main() 
{ 
A <double> a(f1); 
double res = a.getX(1.1, 2.2, 3.3); 
} 

이 건설은 안전한가요? 이 문제를 해결하는 다른 방법이 있습니까? 당신의 도움을 주셔서 감사합니다.

+1

나는 불완전에 대한 확신 C++ 03 허용 형식 정의를 해요 types :'struct X; typedef X Y; ' –

답변

5
당신은 사용할 수 있습니다

별명 템플릿 (C++ 11) 선언 :

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

예 :

http://coliru.stacked-crooked.com/a/5c7d77c2c58aa187

#include <iostream> 
#include <string> 
#include <array> 

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

template <typename T> 
class A 
{ 
public: 
    f_function<T> fff; 

    A() {fff = NULL;} 
    A(f_function<T> pf){fff = pf;} 
}; 

template <typename T> 
T f1(T x, T y, T z) { return x + y + z;} 

template <typename T> 
T f2(T x, T y, T z) { return x - y - z;} 

int main() 
{ 
A <double> a(f1); 
double res = a.fff(1.1, 2.2, 3.3); 
std::cout << res; 
} 
+0

빠른 솔루션에 감사드립니다. – justik