参数规范中的对象

时间:2012-11-20 11:50:11

标签: c++ templates boost boost-spirit

为什么这句话在C ++中有效?

qi::rule<Iterator, std::string(), skipper<Iterator> > name;

从这里摘录:

规则的定义是(恢复)以下内容:

template <typename Iterator, typename T1, typename T2,
                             typename T3, typename T4>
struct rule : boost::proto::extends<bla, bla>, parser<bla, bla>
{
  bla, bla
};

从这里摘录:

规则定义需要一个类型,但是我向它发送一个对象。有可能吗?

2 个答案:

答案 0 :(得分:3)

你没有给它一个对象。 std::string()是不带参数的函数类型,返回std::string

答案 1 :(得分:3)

在此上下文中,std::string()表示返回std::string并且没有参数的内容的类型。例如,

std::string foo() { return "Foo!\n"; }

的实例
struct Foo
{
  std::string operator()() const { return "Foo!\n"; }
};