首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++中的可变函数器可以支持命名字段吗?

C++中的可变函数器可以支持命名字段吗?
EN

Stack Overflow用户
提问于 2018-06-01 02:00:20
回答 2查看 79关注 0票数 1

我正在实现一个名为"Signal<args>“的可变函数式泛型,它管理匹配函数签名类型的函数器的内部队列。在调用Signal<args>::operator()时,队列中的每个函数器都使用相同的输入参数执行。这个想法是,它是一个纯粹的C++11对象类型,它重新创建了一些与Qt的Signal/Slot构造相同的设计行为,但静态编译的依赖性最小。我已经做好了所有的工作,但是我想提高这个泛型的可读性。

我有以下语法:

代码语言:javascript
运行
复制
Signal<int, double> signal;
signal.add(BLOCK, [](int EmployeeID, double FavoriteNumber) {
    std::cout << EmployeeNames[EmployeeID]
              << " has favorite number of "
              << FavoriteNumber << std::endl;
});
signal.add(BLOCK, [](int EmployeeID, double FavoriteNumber) {
    if (EmployeeID > FavoriteNumber) {
        std::cout << EmployeeNames[EmployeeID]
                  << " has ID bigger than favorite number.\n";
    }
});
signal(5, 3.1415); //execute both functors with args = (5, 3.1415)

我想要的是:

代码语言:javascript
运行
复制
Signal<int EmployeeID, double FavoriteNumber> signal;
signal.add(BLOCK, [](int EmployeeID, double FavoriteNumber) {
    std::cout << EmployeeNames[EmployeeID]
              << " has favorite number of "
              << FavoriteNumber << std::endl;
});
signal.add(BLOCK, [](int EmployeeID, double FavoriteNumber) {
    if (EmployeeID > FavoriteNumber) {
        std::cout << EmployeeNames[EmployeeID]
                  << " has ID bigger than favorite number.\n";
    }
});
signal(5, 3.1415); //execute both functors with args = (5, 3.1415)

唯一的区别是,出于可读性的考虑,我希望模板信号类型的声明为参数指定一个名称。理想情况下,我希望这些名称是强制的,如果未指定,则无法编译。

有没有办法做到这一点?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50630239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档