【发布时间】:2014-12-24 10:45:14
【问题描述】:
以前我不得不在各种情况下使用指向成员函数的指针。通常,我使用mem_fun。但是,这是我第一次尝试在返回auto 的成员模板上使用它。如果成员不是模板,它确实适用于auto return 'type',如果指定了返回类型,它也适用于成员模板。另外,我尝试将预期类型直接传递给mem_fun(),但没有帮助。
任何不依赖 mem_fun() 的替代解决方案也将受到赞赏。
以下是由于以下错误导致无法编译的代码:
没有匹配的函数调用“mem_fun()”。
需要注意的是,如果auto 被int 替换,则代码编译通过。此外,如果留下 auto ,但 template<int N> 和 <1> ,代码也可以编译并按预期工作。
class Q
{
public:
int myq;
template<int N>
auto mymethod(int a)
{
std::cout << myq*a << std::endl;
}
void setint(int a)
{
myq = a;
}
};
int main()
{
boost::function<void (int)> p_member;
Q q;
p_member = std::bind1st(
std::mem_fun(
&Q::mymethod<1>
),
&q
);
q.setint(1);
p_member(100);
//...
}
【问题讨论】:
-
FWIW,被clang接受,用3.4.2测试,代码编辑为使用
std::function而不是boost::function。 -
精确的编译器、构建标志和(所有)错误消息会有所帮助。
-
"需要注意的是,如果
auto换成int,代码编译通过。"但是返回类型是void... ;-] -
@ildjarn 漫长的一天...
标签: c++ templates auto c++14 member-function-pointers