我想在我的代碼中執行一組類似的測試,但只是根據參數進行更改。使用模板而不是開關
我可以這樣使用switch語句寫:
bool doTest(EnumSensorFamily family, const StructSensorProposal& proposed)
{
switch (family)
{
case FAM1:
return (ExpectedFam1 == proposed.Fam1SensorId);
break;
case FAM2:
return (ExpectedFam2 == proposed.Fam2SensorId);
break;
case FAM3:
return (ExpectedFam3 == proposed.Fam3SensorId);
break;
default:
ERROR ("Unexpected family");
return false;
}
}
我想用模板專門做這個的
template <EnumSensorFamily family>
bool doTest(const StructSensorProposal& proposed);
template<>
bool doTest<FAM1> (const StructSensorProposal& proposed)
{
return (ExpectedFam1 == proposed.Fam1SensorId);
}
template<>
bool doTest<FAM2> (const StructSensorProposal& proposed)
{
return (ExpectedFam2 == proposed.Fam2SensorId);
}
template<>
bool doTest<FAM3> (const StructSensorProposal& proposed)
{
return (ExpectedFam3 == proposed.Fam3SensorId);
}
有從避免含有switch語句除了這樣做的任何好處幾乎相同的情況?
理想情況下,我希望能夠編寫單一方法來減少維護開銷。
感謝
的方式
我可以使用類似的機制來選擇擬議結構中的字段嗎?每個傳感器系列在提案中都有一個單獨的字段。 – DanS 2011-04-13 14:02:58
我在特質內部放置了一個靜態方法,以根據家庭情況返回更正後的傳感器。 – DanS 2011-04-13 15:27:46
我在traits實現中有一個方法:'template <> struct SensorTraits {static EnumSensorId getProposed(const StructSensorProposal&proposed){return proposed.Fam1SensorId;}};'它當然似乎工作。這是否有缺點? –
DanS
2011-04-14 09:17:22