指向模板函数的指针,它不是任何类的成员

时间:2014-04-07 08:31:00

标签: c++ templates function-pointers typedef

我想要指向模板函数的指针,该函数有2个T类型的参数。

template <typename T>
typedef bool( * f )( T, T );

template <typename T>
bool mniejsze (T pierwszy , T drugi){
    if( pierwszy < drugi)
        return true;
    return false;
}
template <typename T>
bool wieksze (T pierwszy, T drugi){
    if( pierwszy > drugi )
        return true;
    return false;
}

但我明白了:

 error: template declaration of 'typedef'|

编辑:然后我想传递指针: 这是正确的方式吗?

template <typename T>
T minmax(T a[], int n,bool &f){
    return f(a[0],a[1]);

}

3 个答案:

答案 0 :(得分:2)

在C ++ 11中,您可以使用别名:

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

用法:

f<int> f1 = wieksze;
f1( 3, 4);

http://ideone.com/KyUjwP

在C ++ 03中有一个工作量:

template<typename T>
struct f {
    typedef bool( *type)( T, T );
};

用法:

f<int>::type  f1 = mniejsze<int>;
f<int>::type  f2 = mniejsze<int>;
f1( 3, 4);

template<typename T>
T minmax(T a[], int n, typename f<T>::type fp ){ 
    if ( fp( a[0], a[1])) return 1;
    return -1;
}

int main() {
    // your code goes here
    f<int>::type  f1 = wieksze<int>;
    bool b = f1( 3, 4);
    int a[] = { 3, 4};
    std::cout << minmax<int>( a, 0, f1);
    return 0;
}

http://ideone.com/Dh2eEN

答案 1 :(得分:1)

在C ++ 11中,你可以这样做:

template<class T>
using f = bool(*)(T, T);

并使用:

f<int> fp = wieksze;

答案 2 :(得分:1)

以下情况如何?

 template <typename T>
  struct FNPTR {
    typedef bool (*f)( T, T );
 };

放一个结构的虚拟包装器,稍后使用FNPTR :: f? 例如,

FNPTR::f = mniejsze<char>;

这应该有效!