这可能是一个非常明显的问题,但我想在继续我的开发之前确定它。
我有一个模板类,例如:
template<TypeA var1, TypeB var2>
class myClass
{
//Attributes
...
//Methods
...
void checkHit(vector<Real>* path, vector<bool>* active)
{
for(int i = 0; i < N; i++)
{
//Some process
bool hit = ((var1 == Up) || (var1 == Down));
}
//...
bool flag = ((var2 == Left) || (var2 == Right));
}
}
如果我创建和对象喜欢
myClass obj<Up, Right>(...);
执行方法时
obj.checkHit( ... );
程序会检查bool hit = ((var1 == Up)
和(var2 == Right)
吗??换句话说,编译器会丢弃与传递的模板参数无关的代码吗?我的意思是,如果编译后的结果代码类似于
template<TypeA var1, TypeB var2>
class myClass
{
//Attributes
...
//Methods
...
void checkHit(vector<Real>* path, vector<bool>* active)
{
for(int i = 0; i < N; i++)
{
//Some process
bool hit = ((var1 == Up)); //Like if I have never put "|| (var1 == Down));"
}
//...
bool flag = ((var2 == Right));
}
}
希望这个例子足够清楚,我只是简化了(很多)真正的代码,但它应该大致等价。如果不清楚,请告诉我,我很乐意改进它。