std :: string的函数指针的typedef不起作用

时间:2012-08-28 09:47:05

标签: c++ function-pointers boost-bind

我正在尝试定义一个特定的函数指针类型,用于我的boost::bind调用,以解决与未识别的函数重载相关的问题(通过调用static_cast)。我明确定义了typedef来解决std::string::compare上的歧义。

当我写这个函数时,我遇到了错误。

   typedef int(std::string* resolve_type)(const char*)const;

你知道这个typedef有什么问题吗?

1 个答案:

答案 0 :(得分:4)

我想你想要这个。

typedef int(std::string::*resolve_type)(const char*) const;

实施例

#include <iostream>
#include <functional>

typedef int(std::string::*resolve_type)(const char*)const;

int main()
{
   resolve_type resolver = &std::string::compare;
   std::string s = "hello";
   std::cout << (s.*resolver)("hello") << std::endl;
}

http://liveworkspace.org/code/4971076ed8ee19f2fdcabfc04f4883f8

以bind

为例
#include <iostream>
#include <functional>

typedef int(std::string::*resolve_type)(const char*)const;

int main()
{
   resolve_type resolver = &std::string::compare;
   std::string s = "hello";
   auto f = std::bind(resolver, s, std::placeholders::_1);
   std::cout << f("hello") << std::endl;
}

http://liveworkspace.org/code/ff1168db42ff5b45042a0675d59769c0