2015-12-03 3 views
0

Мне нужно настроить инструкцию typedef в зависимости от логического значения a. Как я могу это решить?Redefine typedef в пределах локальной области

#include <iostream> 

template<typename my_type> 
ClassA{...}; 

int main() 
{ 
    bool a = false; 

    typedef int my_type; 
    if (a == true) 
    { 
     typedef int my_type; 
    } 
    else 
    { 
     typedef double my_type; 
    } 

    typedef ClassA<my_type> my_type2; 

} 
+0

Вы можете использовать шаблоны вместо typedef? –

+0

К сожалению, это было бы очень незначительным изменением в огромном проекте кода, поэтому я вынужден использовать typedef ... – user1403546

+2

В настоящее время ваш typedef выходит из сферы действия в момент создания 'my_type b' –

ответ

5

Короткий ответ: вы не можете. Типы - это понятие времени компиляции и не могут зависеть от факторов времени выполнения.

Однако функциональные вызовы могут! Таким образом, переместить логику в шаблон функции и назовем его условно:

#include <iostream> 

template <typename T> 
void foo() 
{ 
    const T b = T(1)/T(3); 
    std::cout << "b = " << b << std::endl; 
} 

int main() 
{ 
    bool a = false; 

    if (a == true) 
     foo<int>(); 
    else 
     foo<double>(); 
} 

Это может, конечно, быть прорезал, возможно, с boost::variant и некоторых посетителей.

У меня хотя бы исправлена ​​проблема с целым делением. Иш.

+0

На самом деле мне нужно «my_type» также в остальной части основной функции (я изменил код) – user1403546

+1

@ user1403546: (a) Не меняйте код после того, как я уже написал ответ 30 минут назад. (b) Жесткий. (c) Делайте, как я предложил. Поместите «остальную основную функцию» в шаблон функции. –

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