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()
感谢一些程序员的指点
我定义了一个 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()
感谢一些程序员的指点