boost :: python long / structured docstrings

时间:2013-08-20 16:39:12

标签: c++ boost-python

我有一个用于python曝光的c ++函数。为此,我使用boost :: python。同样,我希望有一个结构化的医生,看起来非常像

    some text here.....

    Parameters:
    p1 ...
    p2 ...
    p3 ...

    Returns:
    R1 ...

现在,我的问题是,当我将上述内容放在docstring占位符

中时
     def("wrapFunName", cppFunc, "PLACEHOLDER") 

编译器(clang)抛出了missing terminating ' " ' character的错误。这是否意味着我不能用booth :: python包装长期的医生,我必须连续写它?我认为c ++ / c永远是自由形式的语言:(。

提前致谢,

尼基尔

1 个答案:

答案 0 :(得分:2)

请记住,虽然您正在编写要从Python中使用的代码,但您仍在编写C ++,因此您必须遵守C ++语法规则。 C ++不允许多行字符串文字与Python完全相同。特别是,它不允许字符串中的裸线换行,因此当编译器到达行的末尾而没有找到字符串的结尾时,它正确地抱怨,正如您所观察到的那样。

您可以使用several techniques for getting multiline strings in your C++ code中的任何一个。例如,您可以使用\n显式插入换行符,也可以在每行末尾使用\转义换行符。这些技术和更多内容在相关问题的答案中得到了证明。

这是第一种方法的示例。请注意每行末尾的\n。 C ++自动将连续引用的字符串文字连接成单个值,这就是为什么行之间没有运算符的原因。

def("wrapFunName", cppFunc,
    "some text here.....\n"
    "\n"
    "Parameters:\n"
    "p1 ...\n"
    "p2 ...\n"
    "p3 ...\n"
    "\n"
    "Returns:\n"
    "R1 ...")