link 尝试使用 std::function 声明模板化 class 状态时出错(未定义的符号)

link error while trying to declare templated class State using std::function (Undefined symbols)

我定义了一个 State<> 模板 class 来接受一个通用的 std::function<> 可调用参数列表:

template <typename T> class State;

template <class RV, class... Args>
class State<RV(Args...)>
{
private:
    std::function<RV(Args...)> code = nullptr;

public:
    RV operator()() {
        return code();
    }

    void setCode(std::function<RV(Args...)> f) {
        code = f;
    }

    State();
    State(State&);
    State(State&&);
    State& operator=(State&);
    State& operator=(State&&);
    virtual ~State();

};

现在我正尝试在模块中使用它:

auto s = State<void(cocos2d::Touch* touch, cocos2d::Event* event)>();

定义一个模板实例化,它将配置内部 std::function 以接受带有我的参数的 lambda (Touch, Event) 但是我收到链接器错误 Undefined symbols:

Undefined symbols for architecture i386:
  "State<void (cocos2d::Touch*, cocos2d::Event*)>::State()", referenced from:
      UITableView::UITableView(cocos2d::Size, cocos2d::Vec2) in UITableView.o
  "State<void (cocos2d::Touch*, cocos2d::Event*)>::~State()", referenced from:
      UITableView::UITableView(cocos2d::Size, cocos2d::Vec2) in UITableView.o
ld: symbol(s) not found for architecture i386

我只需要为 class

定义(不仅是声明)构造函数和析构函数
State<>::State()
State<>::~State()

感谢一些程序员的指点