我想要指向模板函数的指针,该函数有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]);
}
答案 0 :(得分:2)
在C ++ 11中,您可以使用别名:
template<typename T>
using f = bool( *)( T, T );
用法:
f<int> f1 = wieksze;
f1( 3, 4);
在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;
}
答案 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>;
这应该有效!