可调用对象的签名是什么? (绑定实施)

时间:2014-10-09 13:16:29

标签: bind template-meta-programming c++98

我正在尝试为学校项目实现std::bind,我可以将指针传递给它,使用0到6个参数(现在没有占位符)。它应该在C ++ 98中,我现在只使用auto。

它对于可调用对象也应该有效,但编译器不同意这一点。 我现在试图让它与0参数一起工作。

template<typename ReturnType> 
Caller<ReturnType, ReturnType (*)(), typename Traits0::Type>
bind(ReturnType (*f)())
{
  typedef TypeList0 ListType;
  ListType l;
  return Caller<ReturnType, ReturnType (*)(), ListType>(f, l); 
}

编译器说:

main.cpp:54:16: error: no matching function for call to 'bind'
  auto func6 = bind(&c);
           ^~~~
./bind.hpp:19:1: note: candidate template ignored: could not match 'type-parameter-0-0     ()' against 'Callable'
bind(ReturnType (*f)())

对于可调用对象是否有不同的语法,或者我只是搞砸了某个地方(非常可能)?

我的结构Callable:

struct Callable
{
  void operator()()
  {
    std::cout << "Structure Callable" << std::endl;
  }
};

main.cpp:

Callable c;
auto func6 = bind(&c);

0 个答案:

没有答案