【发布时间】:2013-12-20 15:33:34
【问题描述】:
我正在尝试为模糊控制器创建一个跳转表。基本上,我有很多函数可以接收一个字符串并返回一个浮点数,我希望能够做一些类似的事情:
float Defuzzify(std::string varName, DefuzzificationMethod defuzz)
{
return functions[defuzz](varName);
}
其中 DefuzzificationMethod 是一个枚举。目的是避免使用 switch 语句并进行 O(1) 操作。
我现在拥有的是:
float CenterOfGravity(std::string varName);
std::vector<std::function<float (std::string)>> defuzzifiers;
然后我尝试在构造函数中初始化它:
defuzzifiers.reserve(NUMBER_OF_DEFUZZIFICATION_METHODS);
defuzzifiers[DEFUZZ_COG] = std::bind(&CenterOfGravity, std::placeholders::_1);
这使得编译器抛出关于 enable_if 的大约 100 个错误(我不在任何地方使用,所以我假设 std 会)。有没有办法让这个编译?此外,有没有办法让它成为一个静态向量,因为每个模糊控制器基本上都有相同的向量?
提前致谢
【问题讨论】:
-
请解释正确的。做这项工作让我发疯,因为参考资料很少。
标签: c++ c++11 functional-programming bind member-function-pointers