在c ++中的Typedef应用程序

时间:2012-03-27 18:47:19

标签: c++ casting typedef

是否有一种基于if条件使用typedef的简单方法?

示例:

int depth = someObject->getDepth();

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

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

感谢

3 个答案:

答案 0 :(得分:3)

不,你不能这样做,因为typedef是一个静态的编译时结构。实际上,C ++中的整个类型系统是静态的。您可以使用boost::variant<float, double>等内容解决问题。

答案 1 :(得分:3)

在另一个函数中重构实现:

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());

答案 2 :(得分:1)

功能尽可能接近

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()));
}