簡體   English   中英

是否可以在C ++中定義匿名成員函數

[英]Is it possible to define an anonymous member function in C++

我有一個有趣的用例我的小寵物項目,我希望有一個

static map<std::string, pointer-to-member-function> 

在課堂上。 如果語法有點麻煩,這很容易,而且效果很好。

我還想做的是讓指向成員函數的指針在我的靜態初始化程序中成為一個簡單的lambda表達式。 這樣可以很容易地將這樣的東西打包成一個漂亮的宏。

我希望指向成員函數的指針能夠訪問私有類成員,因此我不能真正使用帶有“this”作為參數的普通lambda。 但是我似乎無法找到任何方法來定義匿名成員函數 - c ++ lambdas似乎都是免費的全局函數?

如果你在地圖中有std::function<void(const MyClass&)> ,那么你可以存儲一個lambda,它將你的類的一個實例作為參數。 只要lambda在MyClass的成員函數中定義,它就能夠訪問MyClass私有類成員:

#include <map>
#include <functional>

class MyClass {
private:
  void myPrivate() const { }
public:
  static std::map<std::string, std::function<void(const MyClass&)>> funcs;

  static void initFuncs() {
    funcs["test"] = [](const MyClass& mc) { mc.myPrivate(); };
  }
};

std::map<std::string, std::function<void(const MyClass&)>> MyClass::funcs;

int main() {
  MyClass::initFuncs();
  MyClass mc;
  MyClass::funcs["test"](mc);    
}

現場演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM