本文介绍了非静态模板成员:可能吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否可以在类中创建非静态模板字段?
如果没有,如何解决?
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;
}
这篇关于非静态模板成员:可能吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!