久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

如何檢查類中是否存在成員名稱(變量或函數),無

How to check if a member name (variable or function) exists in a class, with or without specifying type?(如何檢查類中是否存在成員名稱(變量或函數),無論是否指定類型?)
本文介紹了如何檢查類中是否存在成員名稱(變量或函數),無論是否指定類型?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

這個Q是以下內容的擴展:
模板化檢查類成員函數是否存在?

This Q is an extension of:
Templated check for the existence of a class member function?

是否有任何實用程序可以幫助您找到:

Is there any utility which will help to find:

  • 成員名是否存在于類中?該成員可以是變量或方法.
  • 指定成員的類型應該是可選的

推薦答案

C++03

#define HasMember(NAME) 
  template<class Class, typename Type = void> 
  struct HasMember_##NAME 
  { 
    typedef char (&yes)[2]; 
    template<unsigned long> struct exists; 
    template<typename V> static yes Check (exists<sizeof(static_cast<Type>(&V::NAME))>*); 
    template<typename> static char Check (...); 
    static const bool value = (sizeof(Check<Class>(0)) == sizeof(yes)); 
  }; 
  template<class Class> 
  struct HasMember_##NAME<Class, void> 
  { 
    typedef char (&yes)[2]; 
    template<unsigned long> struct exists; 
    template<typename V> static yes Check (exists<sizeof(&V::NAME)>*); 
    template<typename> static char Check (...); 
    static const bool value = (sizeof(Check<Class>(0)) == sizeof(yes)); 
  }

用法:只需使用您想要查找的任何成員調用宏:

Usage: Simply invoke the macro with whatever member you want to find:

HasMember(Foo);  // Creates a SFINAE `class HasMember_Foo`
HasMember(i);    // Creates a SFINAE `class HasMember_i`

現在我們可以使用HasMember_X來檢查任何class中的X,如下所示:

Now we can utilize HasMember_X to check X in ANY class as below:

#include<iostream>
struct S
{
  void Foo () const {}
//  void Foo () {}  // If uncommented then type should be mentioned in `HasMember_Foo`    
  int i;
};
int main ()
{
  std::cout << HasMember_Foo<S, void (S::*) () const>::value << "
";
  std::cout << HasMember_Foo<S>::value << "
";
  std::cout << HasMember_i<S, int (S::*)>::value << "
";
  std::cout << HasMember_i<S>::value << "
";
}

捕獲:

  1. 在方法的情況下,如果我們不提及類型,那么class不得有重載方法.如果有,那么這個技巧就失敗了.即,即使命名成員出現不止一次,結果也會是 false.
  2. 如果成員是基類的一部分,那么這個技巧就失敗了;例如如果 BS 的基礎 &void B::Bar() 存在,則 HasMember_Bar::valueHasMember_Bar::valueHasMember_Bar::value 將給出 false
  1. In case of methods, if we don't mention the type then the class must not have overloaded methods. If it has then this trick fails. i.e. even though the named member is present more than once, the result will be false.
  2. If the member is part of base class, then this trick fails; e.g. if B is base of S & void B::Bar () is present, then HasMember_Bar<S, void (B::*)()>::value or HasMember_Bar<S, void (S::*)()>::value or HasMember_Bar<S>::value will give false

這篇關于如何檢查類中是否存在成員名稱(變量或函數),無論是否指定類型?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Assertion failed (size.widthgt;0 amp;amp; size.heightgt;0)(斷言失敗(size.width0 amp;amp; size.height0))
Rotate an image in C++ without using OpenCV functions(在 C++ 中旋轉圖像而不使用 OpenCV 函數)
OpenCV: process every frame(OpenCV:處理每一幀)
Why can#39;t I open avi video in openCV?(為什么我不能在 openCV 中打開 avi 視頻?)
OpenCV unable to set up SVM Parameters(OpenCV 無法設置 SVM 參數)
Convert a single color with cvtColor(使用 cvtColor 轉換單一顏色)
主站蜘蛛池模板: 成年人的视频免费观看 | 一级毛片免费 | 成人在线视频观看 | 欧美国产日韩在线观看 | 国产成人一区二区三区久久久 | 97久久精品午夜一区二区 | 日韩三级电影在线看 | 亚洲先锋影音 | heyzo在线 | 欧美日韩大片 | 日韩二 | 夜夜操天天干 | 天堂一区在线观看 | 国产久| 日本a级大片 | 日韩精品视频一区二区三区 | 日本一区二区高清不卡 | 国产精品久久二区 | 在线视频国产一区 | www.中文字幕av | 久久免费精品视频 | 国产在线观看av | 99热在这里只有精品 | 欧美日韩亚洲三区 | 超碰国产在线 | 久久免费观看一级毛片 | 99久久精品国产毛片 | 欧美a在线| 亚洲国产精品久久 | 免费h在线| 一本一道久久a久久精品蜜桃 | 中文字幕亚洲免费 | 日韩色在线 | 成人深夜福利 | 九色在线观看 | 免费欧美视频 | 一区二区三区四区免费在线观看 | 国产成人久久av免费高清密臂 | 国产黄色大片 | 久久亚洲精品国产精品紫薇 | 最新日韩在线视频 |