2013-11-22 2 views
1

У меня есть шаблонный класс, который использует глобальное перечисление с некоторыми режимами, которые мне нужны в качестве параметров для функций-членов этого класса. Я хочу написать специализацию этого класса, которая требует, чтобы значения этого перечисления были переведены. В настоящее время я реализую функцию преобразования, которая в основном представляет собой оператор switch, который преобразует общие значения перечисления в значения, требуемые специализацией. . что-то вроде этого:Отображение перечислений в специализированных специализациях

enum Modes { ModeA, ModeB, ModeC }; 
template<typename Foo> 
class tClass 
{ 
    void bar (Modes _mode) 
    { 
    do_stuff(_mode); 
    } 
} 

template<> 
class tClass<specializedFoo> 
{ 
    void bar (Modes _mode) 
    { 
    do_Stuff(convertMode(_mode)); 
    } 
} 

В memberfunctions называют часто, который вводит дополнительный вызов функции каждый раз при создании экземпляра специализации используется, которая, по моему мнению, должны быть расторгнуты, так как я уже знаю точный тип этого шаблона параметр.

Есть ли способ избежать функции перевода и, следовательно, вызова дополнительной функции?

ответ

1

После немного больше исследований я обнаружил возможный solutiuon:

Если мои функции-членов получить целое значение в качестве параметра вместо значения из режимов и внутри класса специализации я использую отдельное перечисление с переведенными значениями в том же порядке, как и в оригинальном перечислении, я могу использовать:

enum specEnum {ModeASpec, ModeBSpec, ModeCSpec}; 
void bar (int _mode) 
{ 
    do_Stuff(static_cast<specEnum>(_mode)); 
} 

Редактировать/Дополнение:

Там даже нет необходимости менять тип в целое для параметров, так

void bar (Modes _mode) 
{ 
    do_Stuff(static_cast<specEnum>(_mode)); 
} 

делает трюк.

+0

+1. Это в основном это – Sam

Смежные вопросы