c++ - 具有相同类型值的变量的 std::initializer_list
问题描述
我试图从我的一个个人项目中删除一些冗余代码,并想到动态创建一些属性,所以代码如下
#include <functional>
#include <string>
#include <variant>
struct t {
void i(int) {}
void s(std::string) {}
void b(bool) {}
};
int main() {
using setters = std::variant<std::function<void(t *, int)>,
std::function<void(t *, std::string)>,
std::function<void(t *, bool)>>;
std::initializer_list<std::pair<const char *, setters>> props{
{"first", std::function<void(t*, int)>(&t::i)}, {"second", &t::i}};
int i = 0;
for(auto& p : props) {
if (std::get<std::function<void(t*, int)>>(p.second))
i += 2;
}
return i;
}
这实际上无法编译,但是如果我&t::i
用&t::s
for它替换second
它实际上编译得很好,而且如果我隐式指定它的类型second
也编译得很好,但我不喜欢在任何地方指定类型,所以有什么方法可以修复它如果我删除 的类型,它将无法编译first
,所以有什么方法可以删除 first 的类型规范如果有人想要https://godbolt.org/z/GSb8CL
,
这里是 godbolt 链接
解决方案
推荐阅读
- python - tkinter 无法识别图像数据
- android - 如何更改缺少中间名的android包名称?
- php - 如何将加载的自定义计费字段保存到 woocommerce 订单元(管理员订单)?
- c++ - 错误:构建包 ncurses:x86-windows 失败:BUILD_FAILED
- redux - 在 redux 或 react-redux 中面临登录页面问题
- c# - 使用 mpxj 从 mpp 文件中读取任务企业自定义字段值
- python - Tensorflow:如何将注意力层的输出作为输入参数返回?
- flutter - 在使用谷歌登录并收到此错误时
- java - 是什么导致了这个“jpackage 不存在”错误?
- c# - WPF 将 DataGridComboBoxColumn 绑定到 ComboBox 的 SelectedItem