【发布时间】:2014-06-06 11:09:53
【问题描述】:
我正在使用一个包含以下代码的库:
template <typename M>
void _register_member(lua_State *state,
const char *member_name,
M T::*member) {
std::function<M(T*)> lambda_get = [member](T *t) {
//^ error here
return t->*member;
};
//...
但是,此代码不接受 const 成员函数指针。传递这些会产生错误 Function cannot return function type 'void () const' 或任何 const 成员函数的类型。
如何从传递的成员函数中删除 const 限定符或如何应用 std::remove_const?
【问题讨论】:
-
您的代码有很多问题。为什么将
M(T*)作为模板参数传递给std::function(由于程序的逻辑应该是简单的M)?据我所知,表达式t->*member不能在没有参数列表的情况下使用。它没有类型。等等…… -
我很抱歉
M(T*),这部分是对的。但是构造t->*member[没有我上面说的参数列表] 只能用于类数据成员,不能用于类函数成员。 -
这很奇怪,因为使用非常量成员函数,代码和库运行良好。
标签: c++ templates pointers c++11 function-pointers