我只是在Bjorn Karlsson的“Beyond the Standard Library”中输入一些解释绑定器如何工作的代码。我正在使用Visual Studio 2010 Express,并且发现缺少半冒号错误。
这一点看起来很好:
// template for a simple function object
/////////////////////////////////////////////////////////////////////////////
template<typename R, typename T, typename Arg>
class simple_bind_t {
typedef R (T::*fn) (Arg); // fn defines a type - a ptr to member fn
// of object T, returning an R, and taking Arg
fn _fn; // the function object owns a pointer to function.
T _t; // it also owns an object of type T.
public:
simple_bind_t(fn f, const T& t):
_fn(fn), _t(t) {} // instantiate mber variables
R operator()(Arg& a)
{
return (_t->_fn)(a); // invoke the member function on t, pass a as an arg.
}
};
所以这一切都很好。但是当我去定义创建函数对象的实际函数时(参见下面的代码片段),我在行R
的{{1}}下面得到一条红线。当我将鼠标滚过时,它会显示 - R (T::*fn)(Arg),
)。
Error: expected a ';'
有人能找到语法错误的位置吗?
答案 0 :(得分:4)
你在这里写了一个错字:
simple_bind_t(fn f, const T& t):
_fn(fn), _t(t) {} // instantiate mber variables
// ----------^^
fn
命名类型,您打算使用参数f
。可能还有其他错误,但由于您没有发布足够完整的代码(例如,缺少placeholder
的定义),因此无法找到它们。