Приложение Typedef в C ++ - PullRequest
       15

Приложение Typedef в C ++

0 голосов
/ 27 марта 2012

Есть ли простой способ использовать typedef на основе условия if?

пример:

int depth = someObject->getDepth();

if(depth == 32){
    typedef float cast;
}
else{
     typedef double cast;
 }

 cast *data = (cast)someObject->getData();

спасибо

Ответы [ 3 ]

3 голосов
/ 27 марта 2012

Рефакторинг реализации в другой функции:

template<class T>
void foo(T* data){
  // ...
}

int depth = someObject->getDepth();
if(depth == 32)
  foo(static_cast<float*>(someObject->getData());
else
  foo(static_cast<double*>(someObject->getData());
3 голосов
/ 27 марта 2012

Нет, вы не можете сделать это, потому что typedef является статической конструкцией времени компиляции. Действительно, вся система типов в C ++ является статической. Вы можете решить свою проблему с помощью чего-то вроде boost::variant<float, double>.

1 голос
/ 27 марта 2012

Функции как можно ближе

template< class cast>
void do_task(cast* object) {

}

int main() {
    int depth = someObject->getDepth();
    if (depth == 32)
        do_task( static_cast<float*>(someObject->getData()));
    else 
        do_task( static_cast<double*>(someObject->getData()));
}
...