Хотя было бы неплохо использовать перечисление в качестве параметра шаблона и распознать каждое отдельное перечисление отдельно, как вы его написали, этого не произойдет. Вместо этого, я могу предположить, что вы заявляете следующее:
template<MyEnum T>
void func(){
std::cout << T << std::endl;
}
Самое замечательное C++ является то, что способ шаблоны структурированы дает вам токарной полную систему. Следовательно, вам не нужен отдельный вызов, подобный этому, поскольку вы объявили, что получили каждое индивидуальное значение перечисления. Вы можете создать отдельную функцию для каждого значения , когда вам это нужно, и только тогда, когда вам это нужно..
Теперь, перейдя к другой проблеме вашего вопроса, как прокомментировал @delnan, у вас не может быть двух разных имен с таким же именем. Вы можете, однако, есть класс с переменной-члена называется TWO
такие, что:
struct Foo{
int TWO;
};
struct Bar{
int TWO;
};
template<typename T>
void func(){
std::cout << T::TWO << std::endl;
}
Надежда, что помогает.
'enum E1 {ONE, TWO}; enum E2 {ONE, TWO}; 'дает" противоречивое объявление 'ONE', как я ожидал бы - значения' enum E1' не попадают в пространство имен 'E1'. Что вы ожидаете? – delnan
'TWO' определен в вашем' MyEnum', который не является частью класса или пространства имен в том, что вы показали. enum не объявляют область действия и, следовательно, не разрешают использование оператора области. –
, но это то, что я хочу сделать, я хотел бы иметь возможность передавать как E1, так и E2 и получать разные значения при печати. – hidayat