欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++根據(jù)傳入的函數(shù)指針來解析需要的參數(shù)(推薦)

 更新時間:2018年05月06日 16:34:27   作者:月落無影  
C++可以根據(jù)傳入的函數(shù)指針,獲取自己需要的參數(shù)類型,然后根據(jù)參數(shù)源中獲取需要的參數(shù),具體實現(xiàn)方式大家參考下本文

C++可以根據(jù)傳入的函數(shù)指針,獲取自己需要的參數(shù)類型,然后根據(jù)參數(shù)源中獲取需要的參數(shù),這里我用tuple作為演示,不過,只要可以根據(jù)序號,或者順序方式等獲取實參,都可以使用類似的方式實現(xiàn):

先給出一個輔助函數(shù):

/** 獲取第N個類型
*/
template <typename... Cases>
struct select
{
};
template <typename T, typename... Cases>
struct select<T, Cases...> : public select<Cases...>
{
  using ThisType = T;
  using Base = select<Cases...>;
};

下面給出實際的實現(xiàn)函數(shù):

#include <functional>
#include "vs-help.h"

class TupleFunc
{
public:
  TupleFunc() { }

  // 函數(shù)的實際構(gòu)造過程
  template <typename Ret, typename... Args, typename ParamsSource>
  void makeFuncAndParams(Ret(*func)(Args...), ParamsSource& paramSource)
  {
    makeFuncAndParamsImpl<0>(func, select<Args...>(), paramSource);
  }

  // 實際調(diào)用
  void invoke() 
  {
    m_func();
  }

private:
  // 實際調(diào)用初始化
  template <size_t idx, typename Func, typename Select, typename ParamsSource, typename... Params>
  void makeFuncAndParamsImpl(Func&& func, Select, ParamsSource& paramSource, Params&&...args)
  {
    typename Select::ThisType param = std::get<idx>(paramSource);
    makeFuncAndParamsImpl<idx + 1>(func, Select::Base(), paramSource, std::forward<Params>(args)..., std::move(param));
  }
    
  // 結(jié)束調(diào)用
  template <size_t idx, typename Func, typename ParamSource, typename... Params>
  void makeFuncAndParamsImpl(Func&& func, select<>, ParamSource& paramSource, Params&&... args)
  {
    m_func = [func, args...]() { func(args...); };
  }
private:
  std::function<void()> m_func;
};

下面是測試用例:

void print(int x, std::string y)
{
  std::cout << "x: " << x << std::endl;
  std::cout << "y: " << y << std::endl;
}
int main()
{
  std::tuple<int, std::string, std::string> p = { 12, "job", "China" };
  TupleFunc func;
  func.makeFuncAndParams(&print, p);
  func.invoke();
  return 0;
}

通過使用lambda表達式,我們可以很方便的構(gòu)建一個我們調(diào)用時需要的函數(shù),而模板的存在,可以使我們在構(gòu)建一個lambda表達式的時候,可以動態(tài)化,使某些情況下,更加靈活的構(gòu)建各類處理函數(shù)map等。上面只是簡單的演示,具體場景下,需要進行一定的修改。

總結(jié)

以上所述是小編給大家介紹的C++根據(jù)傳入的函數(shù)指針來解析需要的參數(shù),希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!

相關(guān)文章

  • C++回溯算法中的全排列問題分析探討

    C++回溯算法中的全排列問題分析探討

    遞歸中遇到一個問題全排列的問題,我看見回溯特別神奇,特此記錄一下。對比一下深度優(yōu)先搜索與廣度優(yōu)先搜索,個人感覺這里的回溯像是一種遞歸樹中的深度優(yōu)先搜索的算法,他不斷構(gòu)造往下延伸的深度,使其達到完全編列
    2023-03-03
  • 詳解C++?的STL迭代器原理和實現(xiàn)

    詳解C++?的STL迭代器原理和實現(xiàn)

    這篇文章主要為大家介紹了C++的STL迭代器原理和實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • C++超詳細(xì)分析優(yōu)化排序算法之堆排序

    C++超詳細(xì)分析優(yōu)化排序算法之堆排序

    堆是計算機科學(xué)中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱,通常是一個可以被看做一棵完全二叉樹的數(shù)組對象。而堆排序是利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計的一種排序算法。本文將通過圖片詳細(xì)介紹堆排序,需要的可以參考一下
    2023-02-02
  • Visual Studio Code上添加小程序自動補全插件的操作方法

    Visual Studio Code上添加小程序自動補全插件的操作方法

    這篇文章主要介紹了Visual Studio Code上添加小程序自動補全插件的操作方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • C++?超詳細(xì)梳理繼承的概念與使用

    C++?超詳細(xì)梳理繼承的概念與使用

    這篇文章主要介紹了C++?多繼承詳情,C++支持多繼承,即允許一個類同時繼承多個類。只有C++等少數(shù)語言支持多繼承,下面我們就來看看具體的多繼承介紹吧,需要的朋友可以參考一下
    2022-03-03
  • C語言實現(xiàn)隨機搶紅包功能

    C語言實現(xiàn)隨機搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)隨機搶紅包功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 全局變量與局部變量在內(nèi)存中的區(qū)別詳細(xì)解析

    全局變量與局部變量在內(nèi)存中的區(qū)別詳細(xì)解析

    以下是對全局變量與局部變量在內(nèi)存中的區(qū)別進行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • C語言數(shù)組快速入門詳細(xì)講解

    C語言數(shù)組快速入門詳細(xì)講解

    數(shù)組是一組有序的數(shù)據(jù)的集合,數(shù)組中元素類型相同,由數(shù)組名和下標(biāo)唯一地確定,數(shù)組中數(shù)據(jù)不僅數(shù)據(jù)類型相同,而且在計算機內(nèi)存里連續(xù)存放,地址編號最低的存儲單元存放數(shù)組的起始元素,地址編號最高的存儲單元存放數(shù)組的最后一個元素
    2022-05-05
  • 基于C語言實現(xiàn)點餐系統(tǒng)

    基于C語言實現(xiàn)點餐系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于C語言實現(xiàn)點餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C++之vector容器的swap方法解讀

    C++之vector容器的swap方法解讀

    這篇文章主要介紹了C++之vector容器的swap方法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評論