我可以做一个有相同签名的String + lambda表吗?
Can I make a table of String + lambdas that have the same signature?
我有这样的图案:
Thing * y = FindNearestItem();
if (y && (MenuElement * x = FindMenuElementNamed("Identity")))
x->SetText(FString("%.1f", y));
else if (x)
x->Clear();
if (y && (MenuElement * x = FindMenuElementNamed("X1")))
x->SetLocalData(y);
else if (x)
x->Clear();
基本上,我想使用一个静态表:[警告:非常草率的概念代码,无效,我是一个新手,你已经被警告过了]:
struct Table {
const char * label;
?lambda? lambda;
} MyTable[] = {
"Identity", [] (const char * label, Thing * y) { MenuElement * x = FindMenuElementNamed(label); (y && x) ? x->SetText(FString("%.1f", y)) : x->Clear(); },
"X1", [] (const char * label, Thing * y) { MenuElement * x = FindMenuElementNamed(label); (y && x) ? x->SetLocalData(y) : x->Clear(); },
};
Thing * y = FindNearestItem();
for (int i = 0; i != countof(MyTable); ++i)
MyTable[i].lambda(MyTable[i].label, y);
请记住,每个标签的动作是不同的-在我的表中的每一行。
所以模式基本上是相同的,但差异在于所采取的操作,尽管它在每种情况下使用相同的数据集(x,y,label)。但是我不能简单地调用x->DoAppropriateThingFor(label,y);我只是回到创建一个长if/else级联基于标签…
如果需要进一步的说明,请随时问我。因为我还没有机会真正使用它们,所以我在黑暗中与lambdas混在一起…只要所有lambda都是非捕获的(即[]
为空),您可以使用函数指针:
struct Table {
const char* label;
void (*lambda)(const char*, Thing*);
};
如果任何lambdas是有状态的(即,[]
不是空的),那么你就不能使用函数指针。您可以使用std::function
:
struct Table {
const char* label;
std::function<void(const char*, Thing*)> lambda;
};
Visual c++ 2010不支持lambda到函数指针的转换(这种转换是在Visual c++ 2010发布后添加到语言中的),但是Visual c++ 11开发者预览版确实支持这种转换。如果您使用的是Visual c++ 2010,则可以使用std::function
解决方案。
相关文章:
- 我们可以删除链表中静态内存中的节点吗
- std::string 的对象真的可以移动吗?
- 真的没有来自 std::string_view 的 std::string 的显式构造函数吗?
- 有人可以向我解释这个链表是如何工作的吗?
- 我们可以在不使用head指针的情况下通过使用head的简单变量而不是head的指针来实现链表吗
- 有可能在C++中有类的查找表吗
- 我可以使用istream_iterator将<char>一些 istream 内容复制到 std::string 中吗?
- 我应该将 malloc() 用于链表吗?
- 您可以在不使用类的情况下使用链表吗?
- 我们可以用类来写链表吗?不用结构
- 我可以像nodetool那样从C/C++驱动程序强制刷新Cassandra表吗
- qobject_cast<QVBoxLayout*>(layout()),是合适的演员表吗?
- 我们可以使用继承实现链表吗?
- 您可以使用模板预先计算 2 的幂表吗?
- std::string() 和 std::string( " " ) 一样吗
- 我们可以用一个指针实现一个双链表吗
- 我可以遍历一个在析构函数中带有头节点的链表吗?
- 我可以做一个有相同签名的String + lambda表吗?
- 重载char*和std::string安全吗?
- 我可以用花括号构造一个链表吗?