编译器错误:无法绑定带有两个参数的重载函数
Compiler error: failed to bind overloaded function with two arguments
我找不到编译以下代码的方法。我正在寻找一种方法来绑定第一个重载的sn(),它接受一个枚举,这样我就可以向它传递一个字符串。我不需要绑定第二个重载的。
#include <iostream>
struct Stats
{
enum AlignMetrics
{
AlignExon,
AlignIntron,
AlignBase
};
// How to bind this function??
inline double sn(const std::string &cID, enum AlignMetrics m) const
{
return 0.0;
}
inline double sn(const std::string &cID, const std::string &id) const
{
return 0.0;
}
};
int main(int argc, const char * argv[])
{
Stats stats;
// Ok (calling directly)
stats.sn("", Stats::AlignMetrics::AlignExon);
// Can't compile (I want to bind it such that it takes only the first argument)
std::bind(static_cast<double (Stats::*)(const std::string &, enum Stats::AlignMetrics)>(&Stats::sn), &stats, std::placeholders::_1, Stats::AlignMetrics::AlignExon);
return 0;
}
您缺少一个const
:
std::bind(static_cast<double (Stats::*)(const std::string &, enum Stats::AlignMetrics) const>(&Stats::sn), &stats, std::placeholders::_1, Stats::AlignMetrics::AlignExon);
// ^^^ Missing
简化建议:
double (Stats::*fptr)(const std::string &, enum Stats::AlignMetrics) const = &Stats::sn;
std::bind(fptr, &stats, std::placeholders::_1, Stats::AlignMetrics::AlignExon);
您可以使用lambda:
auto func = [&](std::string const &s) { return stats.sn(s, Stats::AlignMetrics::AlignExon); };
相关文章:
- 为什么模板参数推导不适用于仅指定前两个参数的可变参数模板类?
- C++如何在 switch 语句中放置两个参数
- 为什么我不能用两个参数重载 C++ 运算符 []?
- C++添加检查以避免读取两个参数
- 宏的定义从一个值创建两个参数
- C++ 如何使用一个参数从派生类构造函数中调用具有两个参数的超类构造函数
- 通过将两个参数包的元素线程化为类型对来解压缩这两个参数包
- 'int main(int, int, std::__cxx11::string, std::__cxx11::string)'只需要零或两个参数 [-Wmain]
- 错误:函数调用中有两个参数
- Qt 线程两个参数
- 为什么lambda函数用于stl函数,例如sort(),c 中的max_element()函数以两个参数为输入
- 警告:用两个参数构造函数返回对象时,表达结果未使用
- 具有两个参数的 Decltype 修改类型
- 将两个参数传递到谓词remove_if
- 同时扩展两个参数包
- 用两个参数调用新操作员,但没有分配
- 在Variadic模板中交换两个参数
- C CPPUNIT_ASSERT具有两个参数
- 具有两个参数的乘法函数
- 使用一个可选参数获取两个参数到main