c++11 - 自动化方法调用 C++
问题描述
我正在开发 C++11 应用程序。我有一个方法会被调用很多次(1000)。该方法接受字符串和函数指针作为参数。
问题是指向函数的指针将采用不同类型的参数,有时是 int,有时是 std:string 等等。
为了避免对我的方法进行 1000 次不同的调用,我想用字符串和指向函数的指针构建一个 std::pairs 列表并遍历它来调用我的方法。
但我还没有找到一种干净的方法来实现这一目标。
例子:
// This is the method I want to call,
// T is function pointer, I have several versions for
// different data types, e.g here bool version
template <class T>
void myMethod(const std::string& strArg,
void (T::*setter) (const bool)) const
先前的方法将使用不同的参数调用 1000 次:每个字符串对应于唯一的函数指针。
现在我将其称为 1000 次,例如:
myMethod(str1, pFunction1);
myMethod(str2, pFunction2);
myMethod(str3, pFunction3);
...
myMethod(str1000, pFunction1000);
我想,首先创建一个由我手动填写的列表:
std::list<std::pair<str, functionPointer>>
然后我会为列表中的每个成员迭代调用我的方法
请问有什么想法吗?
谢谢并恭祝安康
解决方案
我希望您稍后再调用您的函数!
假设我们可以编写您想要的代码(伪代码):
std::list<std::pair<str, PointerToFunctionWithAnySignature >> ptrList;
现在你填写清单
ptrList.add( "bla", Do1 );
ptrList.add( "blub", Do2 );
函数的签名如下:
void Do1(int);
void Do2(float, std::string& );
现在您要遍历列表:
for ( auto& el: ptrList )
{
// here we want to call the function:
el.second( ???????? );
}
这就是问题所在!如果您有不同的签名:您如何知道必须在该调用中的哪个位置填写哪个参数。
结果,即使您能够存储指向具有不同签名的函数的指针,也没有任何意义,因为您无法调用它们!
如果您已经知道以后调用的参数,则可以使用lambda functions
将函数和参数存储为单个对象,并使其可通过唯一签名进行调用。您也可以为此使用 std::bind,但首选 lambda,更易于处理且更易于阅读。
推荐阅读
- salt-stack - 使用 Saltify (salt-cloud) 部署 salt-minion 时,如何在我的 minions 上“撒”自定义颗粒?
- json - 如何将整个 HTML 正文导出到嵌套 JSON
- macos - 如何从 MacOS 的终端在 Texmaker 中打开 tex 文件?
- c++ - 类中的插入排序?
- angular - Angular 6 - 在 ngx-sortable 控件中放置一个动态表单
- macos - getRectsBeingDrawn 返回 NULL
- excel - 使用 PowerPoint VBA 在 Excel 中打开 CSV 文件
- multithreading - Rust 初始化后设置静态生命周期
- java - 删除项目后更新 StableIdKeyProvider 缓存和 RecyclerView/SelectionTracker 在新选择时崩溃
- sqlalchemy - 带有 groupby 和 orderby 的 SQLAlchemy 子查询