我想要一个基于给定回调函数检查某些条件的函数。
考虑这段代码:
class Foo{
template <class ParamType>
struct IsGood
{
typedef bool (*Check)(typename const ParamType*, int other);
};
template< typename ParamType >
void DoSmth(IsGood<ParamType>::Check isGood, const ParamType* param){
//...
if(isGood(param, some_int_calculated_here)) doSmthElse();
}
我想要的是这样称呼它:
bool checkEqualInt(int* i, int j){return *i==j;}
bool checkEqualFloat(float* i, float j){return *i==j;}
DoSmth(checkEqualInt, &i);
DoSmth(checkEqualFloat, &i_float);
(所有构建的例子来说明问题)
编译器不会得到它并抛出错误 C2664“在 bool(ParamType,int) 中从 bool(int*,int) 转换参数 1 是不可能的”
我有一个不使用的解决方案
template< typename ParamType, Check >
void DoSmth(Check isGood, const ParamType param)
哪个省略了检查功能的必要声明?
最好的解决方案是在函数本身中获取 IsGood() 标头。