参数说明中的对象 为什么这个句子在C++中有效?< /P> qi::rule<Iterator, std::string(), skipper<Iterator> > name; qi::规则名称;
摘自:参数说明中的对象 为什么这个句子在C++中有效?< /P> qi::rule<Iterator, std::string(), skipper<Iterator> > name; qi::规则名称;,c++,templates,boost,boost-spirit,C++,Templates,Boost,Boost Spirit,摘自: 规则的定义如下(续): template <typename Iterator, typename T1, typename T2, typename T3, typename T4> struct rule : boost::proto::extends<bla, bla>, parser<bla, bla> { bla, bla }; 模板 结构规则:boost::proto::
template <typename Iterator, typename T1, typename T2,
typename T3, typename T4>
struct rule : boost::proto::extends<bla, bla>, parser<bla, bla>
{
bla, bla
};
模板
结构规则:boost::proto::extends,解析器
{
布拉,布拉
};
摘自:
规则定义需要一个类型,但我给它发送了一个对象。有可能吗?你没有给它一个对象
std::string()
是不带参数并返回std::string
的函数类型。在本上下文中,std::string()
表示返回std::string
且没有参数的函数类型。比如说,
std::string foo() { return "Foo!\n"; }
或是
struct Foo
{
std::string operator()() const { return "Foo!\n"; }
};
值得注意的是,这是明确的原因之一,因为模板参数只能是(a)类型或(b)compiletime常量整数表达式。由于构造函数不能是
constexpr
,编译器很清楚,您不是在构造对象,而是在声明函数类型。C++ FQA有一个很好的段落,上面的“我的理解是构造函数可以是代码> CONExPRP< /COD>”,但是自从