0
有人可以改進我的這個功能嗎? enumToSTLContainer將返回其元素來自指定枚舉列表的任何STL容器。STL容器的枚舉列表
#include <iostream>
#include <vector>
#include <set>
enum MyEnum {A, B, C, D, E, FirstMyEnum = A, LastMyEnum = E};
template <typename CONTAINER>
CONTAINER enumToSTLContainer (typename CONTAINER::value_type first, typename CONTAINER::value_type last) {
CONTAINER v;
for (typename std::underlying_type<typename CONTAINER::value_type>::type N = first; N <= last; N++)
v.push_back(static_cast<typename CONTAINER::value_type>(N)); // But only works for STL containers with push_back defined.
return v;
}
int main() {
const std::vector<MyEnum> enumVector = enumToSTLContainer<std::vector<MyEnum>> (FirstMyEnum, LastMyEnum);
for (MyEnum x : enumVector)
std::cout << x << ' '; // 0 1 2 3 4
// const std::set<MyEnum> enumSet = enumToSTLContainer<std::set<MyEnum>> (FirstMyEnum, LastMyEnum); // won't compile
}
上述問題。僅適用於定義了push_back的STL容器,需要指定枚舉列表的第一個和最後一個元素,如果枚舉值不連續,則不起作用...
也許使用可變參數模板獲取initializer_list,然後可以返回所需的STL容器?使用std :: integer_sequence從枚舉中取出一個元組,或者在它們不是連續的情況下創建與枚舉元素相對應的自己的integer_sequence?
這個問題似乎是題外話,因爲它是關於改進代碼,並會在http得到更好的服務://codereview.stackexchange .com – 2014-10-26 15:51:23
你想要一個範圍如'enum {a,b = 100};'? – 2014-10-26 15:55:10
這就是爲什麼我的功能需要嚴肅的改進才能工作。 @Captain無知,我的代碼只是一個(可憐的)建議,以解決方案開始。我實際上是在尋求想法和方法。 – prestokeys 2014-10-26 15:58:31