在c ++中使用带有仿函数的头文件

时间:2018-04-13 18:06:21

标签: c++ c++11 header functor

我试图在更大范围的项目中使用仿函数。我设法在它自己的时候实现了一个仿函数,但是我在查找我在头文件(.h)和.ccp文件中定义东西的位置时遇到了很多麻烦,以便我可以在其余的文件中访问我的仿函数我的节目。当仿函数在一起时,它看起来是这样的:

class SpecialAttack {
public:
    SpecialAttack() {};
    virtual bool operator() (double timer) = 0;
};

class BallAttack : public SpecialAttack {
public:
    BallAttack() {};
    virtual bool operator() (double timer) { return (timer==0); }
};

class SpiderAttack : public SpecialAttack {
public:
    SpiderAttack() {};
    virtual bool operator() (double timer) { return true; }
};

double special_attack(double timer, SpecialAttack* func) {
    return (*func)(timer);
}

我无法弄清楚如何将其分解为适当的文件,以便我可以在其余的代码中引用它。我应该在.h文件中放置哪些部分以及.ccp文件中包含哪些部分?谢谢!

1 个答案:

答案 0 :(得分:0)

.hpp和.cpp文件之间的分割仿函数遵循与具有成员函数的任何类相同的声明和定义模式。

attack.hpp

#pragma once

class SpecialAttack {
public:
    SpecialAttack();
    virtual bool operator() (double timer) = 0;
};

class BallAttack : public SpecialAttack {
public:
    BallAttack();
    virtual bool operator() (double timer) override;
};

class SpiderAttack : public SpecialAttack {
public:
    SpiderAttack();
    virtual bool operator() (double timer) override;
};

attack.cpp

#include "attack.hpp"

SpecialAttack::SpecialAttack() {
}

BallAttack::BallAttack() {
}

/*virtual*/ bool BallAttack::operator() (double timer) /*override*/ {
    return (timer==0);
}

SpiderAttack::SpiderAttack() {
}

/*virtual*/ bool SpiderAttack::operator() (double timer) /*override*/ {
    return true;
}