我目前正在为一个函数创建模板,如果模板在一个特定的类中,我需要一种不在函数中包含代码的方法,我已经尝试了下面的方法,但我没想到它会起作用,它是 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
}
最佳答案
这是使用模板特化的好地方。尝试以下操作:
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
做一些其他事情。当编译器看到您在模板中指定的类型时,它会自动选择要使用的正确类型。
关于c++ - 模板中的预处理器条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24183289/