C ++实例对象的函数指针

时间:2013-03-02 20:31:06

标签: c++ function-pointers

我有一个简单的模板类,它有两个函数指针和一个值。一个指针是比较运算符,另一个指针是对象(例如getX())。

部首:

template<class T>
class A {

public:
    A(T (*function)(), const bool (*op)(T,T),const T value) : 
        function(function), value(value), op(op){}
    bool valid();

private:
    T value;
    T (*function)();
    bool (*op)(T, T);
};

CPP:

#include "A.h"

template<class T>
bool A<T>::valid(){
    return (op(function(),value));
}

因此,如果您创建了A:

的实例
A<float> a = A<float>(x->getX,operator==,20);

当调用有效时,将等同于:

x->getX() == 20;

实际的标头/类定义工作正常。问题是在创建A的实例时;它不起作用。我认为这是因为'x-&gt; getX',但有没有办法做我想要的?

感谢。

EDIT ::

确切的编译器错误如下:

.... \ Classes \ Objects \ B.cpp:42:错误:没有匹配函数来调用'A :: A(未解析的重载函数类型,未解析的重载函数类型,浮点)' .... \ Classes \ Objects / Ah:30:注意:候选人是:A :: A(T()(),const bool()(T,T),T)[with T =浮动] .... \ Classes \ Objects / A.h:26:注意:A :: A(const A&amp;)

请注意:'x-&gt; getX'返回一个浮动

1 个答案:

答案 0 :(得分:0)

如果你可以使用C ++ 11:

实现目标的方法是使用std::bindstd::function

另外,如果你想作为基本类型(int,float ...)的参数比较运算符传递,你可以使用&lt; functional&gt;中定义的Comparison function objects。 header(std :: less,std :: greater ...)

#include <functional>
#include <iostream>

template<class T, typename BinaryPredicate>
class A {

public:
    A(std::function<T()> function, BinaryPredicate pred,const T value) : 
        function_(function), pred_(pred), value_(value){}
    bool valid();

private:
    std::function<T()> function_;
    BinaryPredicate    pred_;
    T                  value_;
};

template<class T, typename BinaryPredicate>
bool A<T, BinaryPredicate>::valid(){
    return (pred_(function_(), value_));
}

class X {

   private:
   float val_;

   public:
   X(float val) : val_(val) {}

   float getX() {return val_;}
};

int main(void)
{
   X x(20);

   A<float, std::equal_to<float>> a(std::bind(&X::getX, &x), std::equal_to<float>(), 20);

   std::cout << std::boolalpha << a.valid() << std::endl;

   return (0);
}