【问题标题】:Find template parameters at runtime在运行时查找模板参数
【发布时间】:2012-09-07 03:18:51
【问题描述】:

可以访问模板“类型”,例如在标准中

std::vector<int>::size_type

作为模板参数传递的对象是否可以有相同的东西? 例如:

template<int i>
class A {
//?
};

A<3> instance;
int number = instance::???? //<--- assigns 3 to number

是否可以在运行时再次获取对象类型中传入的 3?无需在 A 类中创建特定成员(这会增加对象的大小)

谢谢

【问题讨论】:

    标签: c++ templates


    【解决方案1】:

    编译器在编译时就知道变量的类型,只要让它放弃就可以了。

    template<int i>
    int get(const A<i> & instance)
    {
        return i;
    }
    

    【讨论】:

      【解决方案2】:
      template<int i>
      class A { 
      public:
        enum { number = i };
      };
      
      int main() {
        A<3> instance;
        std::cout << instance.number;
        return 0;
      }
      

      【讨论】:

      • 让它static,它肯定不会改变每个实例。您的解决方案增加了班级的规模,这是问题中明确禁止的情况。
      • 这不应该改变大小
      • 你的新版本,是的,旧版本,没有。
      • 这是一个比公认的更好的解决方案。当优化不正确时,被接受的很可能会向可执行文件添加一堆额外的、毫无意义的函数。这个版本没有添加任何内容。
      猜你喜欢
      • 1970-01-01
      • 2011-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 2018-05-27
      • 2019-12-12
      相关资源
      最近更新 更多