c++ - 使用函数 Object tr1::function<> 调用仿函数

标签 c++ functor effective-c++

我尝试实现 Scott Mayer 书中的代码示例,该示例是关于通过函数对象调用仿函数

头文件gameCharachter.h

#ifndef GAMECHARACTER_H
#define GAMECHARACTER_H

#include <iostream>
#include <typeinfo>
using namespace std;
#include <tr1/functional>

class GameCharacter;

int defaultHealthCalc(const GameCharacter& gc);

class GameCharacter
{

public:

    typedef std::tr1::function<int (const GameCharacter&)> HealthCalcFunc;

    explicit GameCharacter(HealthCalcFunc hcf = defaultHealthCalc)

        : healthFunc(hcf)
    {
    }

    ~GameCharacter()
    {
    }

    int healthValue() const
    {
        return healthFunc(*this);
    }
private:

    HealthCalcFunc healthFunc;

};

class EyeCandyCharacter:   public GameCharacter    // another character
{

public:

    explicit EyeCandyCharacter(HealthCalcFunc hcf = defaultHealthCalc)

        : GameCharacter(hcf)
    {
        cout<<typeid(*this).name()<<"::"<<__FUNCTION__<<""<<endl;

    }                                           

};   

struct HealthCalculator                          
{
    /*explicit*/ HealthCalculator()
    {

    }

    int operator()(const GameCharacter& gc) const     // calculation function
    {
        cout<<typeid(*this).name()<<"::"<<__FUNCTION__<<""<<endl;
           return 0;
    }                                        

};

#endif // GAMECHARACTER_H

main.cpp 是:

#include "gamecharacter.h"

int main()
{
    EyeCandyCharacter ecc1(HealthCalculator());       
    ecc1.healthValue();
}

为什么 function<> 对象拒绝调用 healthvalue() 中的 operator() 函数

最佳答案

EyeCandyCharacter ecc1(HealthCalculator());

声明一个名为 ecc1 的函数,该函数采用“指向不带参数的函数并返回一个 HealthCalculator”类型的参数,并返回一个 EyeCandyCharacter。我认为这不是您的意图。

关于c++ - 使用函数 Object tr1::function<> 调用仿函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28760361/

相关文章:

scala - 如何向仿函数映射函数添加类型约束

c++ - 比较函数对象的类型签名

c++ - 函数指针的赋值(effective c++ item 35)

c++ - 为什么 argc 不是常量?

c++ - C++ Linux GCC 应用程序中的 GUID

c++ - 安装 thrift idl

c++ - 期望引入类型(枚举类)的成员函数的缩写参数

c++ - Netbeans C++ 项目上的 SFML 错误

c++ - C++中的函数指针与仿函数

c++ - 我是否正确理解了 Scott Meyers 的 std::weak_ptr 示例的要点?