0
來創建特定類型我有一個模板c + +動態地從模板
enum MyEnum = {MyEnum _1, MyEnum _2, ...};
template<MyEnum T>
struct MyStruct {
...
}
現在我想創建一個特定類型的基於條件的模板。但是,MyEnum中有一些元素是開放的,所以我不能通過某種開關來完成。
所以我在尋找一種方式做一些像
void doStuff() {
MyEnum e = getType();
MyStruct<e> s;
}
但編譯器抱怨,e不是一個常量表達式。這是有道理的,因爲我有運行時信息。有沒有一種方法能夠完美地構建一些模仿
doStuff() {
MyEnum e = getType();
Switch(e) {
case MyEnum_1:
MyStruct<MyEnum_1> s;
....
case MyEnum_2: ...
...
}
原因是,如前所述,枚舉的列表可能會擴展/定期更換,我寧願不用維護的代碼在其他結束每次發生時。
這不能做。 C++不能以這種方式工作。模板實例在編譯時定義,而不是運行時。你必須使用'switch',或者一個邏輯等價物。 –
是的,[本提案]中描述的技術(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0376r0.html)和[作者的討論](https: //www.youtube.com/watch?v=Fjw7NjndQ50)。通過提供可能值的上限和下限,可以將運行時值作爲參數(更精確地說,是其類型)中的常量表達式接收。實際的技術並沒有太多的細節,但是AFAIK,它只是需要實現'std :: visit',所以也許一些'variant'實現文章會有更多。 – chris