我目前正在为一个函数创建模板,如果模板在特定的类中,我需要一个不在函数内部使用代码的方法,我已经尝试了下面的内容,但我没想到它会工作,它是C ++,这太方便了:P是否其他人对如何实现这一点有任何建议?
template<typename T> int Position::lSetPosition(lua_State* L){
#if T != Pro::Scene::Scene
auto p = Util::luaP_touserdata<T>(L, 1);
auto v = Math::Vector2(static_cast<int>(lua_tonumber(L, 2)),
static_cast<int>(lua_tonumber(L, 3)));
p->setPosition(v);
return 0;
#endif
}
答案 0 :(得分:3)
这是使用模板专业化的好地方。试试以下内容:
template<typename T> int Position::lSetPosition(lua_State* L) {
auto p = Util::luaP_touserdata<T>(L, 1);
auto v = Math::Vector2(static_cast<int>(lua_tonumber(L, 2)),
static_cast<int>(lua_tonumber(L, 3)));
p->setPosition(v);
return 0;
}
template<> int Position::lSetPosition<Pro::Scene::Scene>(lua_State* L) {}
本质上,模板专门化允许您根据类型实现模板类或函数的不同实现,这正是您想要的。对于类型T
执行某些操作,对于类型Pro::Scene::Scene
执行其他操作。当编译器看到您在模板中指定的类型时,它将自动选择要使用的正确类型。