本文介绍了非静态模板成员:可能吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以在类中创建非静态模板字段?

如果没有,如何解决?

Is it possible to create non-static template field in a class?
If no, how to workaround?

应在编译时根据需要创建此类字段。

Such fields should be created at compile time as needed.

我有很多 B -class,例如 B1 B2 B3 。 br>
(实际上,它们具有更有意义的名称。)

I have a lot of B-class, like B1,B2,B3.
(In real case, they have more meaningful names.)

我想创建一个类 D 具有 std::unordered_map (suggestion from Yakk; thanks) of indexes and RTTI?

#include <map>
#include <iostream>
#include <typeindex>

class B1 {};
class B2 {};
class B3 {};

class D
 {
   private:
      std::unordered_map<std::type_index, std::size_t> bxMap;

   public:
      template <typename BX>
      void add ()
       { ++ bxMap[std::type_index(typeid(BX))]; }

      template <typename BX>
      int get ()
       { return bxMap[std::type_index(typeid(BX))]; }
 };

int main ()
 {
   D d1;
   d1.add<B2>();    d1.add<B2>();   d1.add<B3>();
   std::cout<<d1.get<B1>()<<" "<<d1.get<B2>()<<" "<<d1.get<B3>()<<"\n";
   //^ print 0 2 1
   D d2;
   d2.add<B1>();
   std::cout<<d2.get<B1>()<<" "<<d2.get<B2>()<<" "<<d2.get<B3>()<<"\n";
   //^ print 1 0 0
   return 0;
 }

这篇关于非静态模板成员:可能吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-27 21:27