can C++;模板是否检测特定类型的成员? < C++模板是否可以检测特定类型的成员?代码如下: template <typename T> class Element { }; template <typename T> class Container { public: Container() { // check if T has member which type is "Element<whatever>" // how many Element<whatever>s? // offset? } }; 模板 类元素{ }; 模板 类容器{ 公众: 容器(){ //检查T是否有类型为“元素”的成员 //有多少元素? //抵消? } };
我有一个名为can C++;模板是否检测特定类型的成员? < C++模板是否可以检测特定类型的成员?代码如下: template <typename T> class Element { }; template <typename T> class Container { public: Container() { // check if T has member which type is "Element<whatever>" // how many Element<whatever>s? // offset? } }; 模板 类元素{ }; 模板 类容器{ 公众: 容器(){ //检查T是否有类型为“元素”的成员 //有多少元素? //抵消? } };,c++,C++,我有一个名为Container的模板类,我想检查: 如果传入的类型T具有成员,则类型是元素 如果是的话,我可以得到多少个成员,哪种类型是元素 如果是这样的话,我可以得到到课程开始的偏移量吗 详细解释要求3: 我想要的是,当我获得一段由reinterpret\u cast转换的数据时,访问这些字段(如果存在),如果容器的T是一个聚合,这在C++20中是可行的;我使用boost::pfr库,因为它简化了这个习惯用法,但很容易手动重新实现(boost::pfr的源代码非常容易阅读) #包括 模板 自动
Container
的模板类,我想检查:
T
具有成员,则类型是元素
元素
我想要的是,当我获得一段由
reinterpret\u cast
转换的数据时,访问这些字段(如果存在),如果容器的T
是一个聚合,这在C++20中是可行的;我使用boost::pfr库,因为它简化了这个习惯用法,但很容易手动重新实现(boost::pfr的源代码非常容易阅读)
#包括
模板
自动计数\u类型()的\u成员\u
{
无符号整数计数=0;
boost::pfr::for_每个_字段(T{},[&](U&){
计数+=标准::是否相同;
});
返回计数;
}
给定
structfoo{
要素a、b;
元素c;
std::字符串d;
};
然后
count\u type()的\u成员数=2
在gcc.godbolt.org上运行示例:No,这是不可能的。你所要求的是编译时反射,它还没有在C++中。对于2个模板,TFO和TeleMsFoO对于更基本的类来说可能更干净。你可以检查一个成员的存在,因为你知道它的名字。你所要求的是不可能的。
struct Foo {
Element<int> a, b;
Element<float> c;
std::string d;
};
count_members_of_type<Foo, Element<int>>() == 2