【问题标题】:How to switch data type on run time如何在运行时切换数据类型
【发布时间】:2016-02-26 00:13:36
【问题描述】:

在我使用的库中,它具有不同签名的函数,如下所示

void Func( int* ptr);
void Func( float* ptr);
void Func( double* ptr);

我的函数需要根据输入标志 iSwitch 来决定调用哪个函数,如下所示:

void test( int iSwitch, void* ptr1)
{
    switch (iSwitch)
    {
        case 0:
              Func( (int*) ptr1);
              break;
        case 1:
              Func((float*) ptr1);
              break;
        case 3:
              Func((double*) ptr1);
              break;
    }
}

应该没问题。但是我不想把 Func 放在 switch 块中。我希望能够以某种方式首先在 switch 块中切换指针的类型,然后在 ptr1 被动态转换为相应类型之后只有 1 个 Func。

具体来说,我想要的东西如下:

void test( int iSwitch, void* ptr1)
{
   switch( iSwitch)
   {
   // I want to be able to somehow switch type of pointer (say   DummyDataType) here depending iSwitch 

    }
    Func(( DummyDataType) ptr1);

 }

您能否建议我如何做到这一点?

谢谢!

【问题讨论】:

  • 听起来很像模板的用途。或指针数组。
  • boost::variant 可能会对您有所帮助。
  • 被调用的重载必须在编译时选择(因此你需要在 switch 中调用这三个)。

标签: c++ pointers casting


【解决方案1】:

您不能将类型存储在变量中,然后在稍后的转换中使用它,如果这是您所要求的。编译器需要在编译时知道强制转换的类型,否则它无法正确生成代码以执行此操作。此外,编译器需要在编译时知道函数参数的类型。否则,它将不知道要分派哪个版本的函数。我认为您的解决方案已经达到了预期效果,但如果您使用标志来打开变量的类型,您可能想看看您的设计。也许给我们更多的背景,我们可以提供一些更好的解决方案。

【讨论】:

  • 有道理。谢谢
猜你喜欢
  • 2015-08-18
  • 2011-10-17
  • 2010-09-23
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
  • 2014-01-17
  • 1970-01-01
相关资源
最近更新 更多