我正在嘗試重構一些代碼。基本上是一個基于列舉的狀態機。 有很多開關陳述句和函式被以不同的名稱和模糊的方式呼叫。
既然他們強迫我保留列舉,我想用模板重構它。基本上我想用模板來實作多型性。由于狀態是有限的,應該有一個方法,但我找不到最好的方法。
#include <iostream>
enum class AnimalType
{
狗。
貓
};
template< AnimalType T>
void Foo()
{
std::cout << "未知動物
"。
}
template<>
void Foo<AnimalType::Dog>()
{
std::cout << "我是一只狗
"。
}
template<>
void Foo<AnimalType::Cat>( )
{
std::cout << "我是一只貓
"。
}
int main()
{
AnimalType CurrentAnimal = AnimalType::Dog;
//Foo<CurrentAnimal>(); 不會被編譯。
return 0。
}
uj5u.com熱心網友回復:
你需要一個編譯時可評估的常量,這將會起作用
int main()
{
constexpr auto CurrentAnimal = AnimalType::Dog;
Foo<CurrentAnimal>()。
return 0;
}
或者直接使用
Foo<AnimalType::Dog> ();
注意:你不能用你的構造在運行時做出決定。 模板只能導致編譯時的多型性
uj5u.com熱心網友回復: 提到的那樣。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/316106.html
標籤:
上一篇:?matlab從入門到精通?

