【问题标题】:Select template argument at runtime in C++在 C++ 中在运行时选择模板参数
【发布时间】:2010-10-11 03:21:34
【问题描述】:

假设我有一组函数和类,它们被模板化为使用单个 (float) 或 double 精度。当然,我可以只写两段引导代码,或者乱用宏。但是我可以在运行时切换模板参数吗?

【问题讨论】:

    标签: c++ templates runtime arguments


    【解决方案1】:

    模板是一种编译时机制。顺便说一句,宏也是(严格来说 - 一种预处理机制 - 甚至在编译之前就出现了)。

    【讨论】:

      【解决方案2】:

      不,您不能在运行时切换模板参数,因为模板是在编译时由编译器实例化的。您可以做的是让两个模板都从一个公共基类派生,始终在代码中使用基类,然后决定在运行时使用哪个派生类:

      class Base
      {
         ...
      };
      
      template <typename T>
      class Foo : public Base
      {
          ...
      };
      
      Base *newBase()
      {
          if(some condition)
              return new Foo<float>();
          else
              return new Foo<double>();
      }
      

      宏与模板有同样的问题,因为它们在编译时被扩展。

      【讨论】:

        【解决方案3】:

        模板纯粹是编译时构造,编译器将扩​​展模板并使用指定的参数创建您的类/函数,然后直接将其转换为代码。

        如果您尝试在运行时在 foo&lt;float&gt;foo&lt;double&gt; 之间切换,您要么需要使用一些元编程技巧,要么只为每个设置单独的代码路径。

        【讨论】:

          猜你喜欢
          • 2019-12-12
          • 2022-01-11
          • 2016-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多