在探索 C++11 的 constexpr/operator"' 特性的主题时,我偶然发现了这篇文章: http: //www.codeproject.com/Articles/447922/Application-of-Cplusplus11-User-Defined-Literals-t
它引用了一个示例,说明提供 string-to-binary-number udl 的代码如何:
constexpr unsigned long long ToBinary(unsigned long long x, const char* s)
{
return (!*s ? x : ToBinary(x + x + (*s =='1'? 1 : 0), s+1));
}
constexpr unsigned long long int operator "" _b(const char* s)
{ return ToBinary(0,s);}
这一切都像宣传的那样工作,但我不太喜欢全局命名空间被辅助 ToBinary 函数污染。我没有尝试修改函数的名称,而是尝试构想一种解决方案,该解决方案将在 operator"" 主体中嵌入一个递归 lambda 函数。
C++ 中递归 lambda 的解决方案是已知的,它们采用 std::function 用法。为了在 constexpr 运算符“”中实现这一点,需要将递归 lambda 的声明和调用嵌入到单个 return 语句中。我实现这一目标的尝试失败了,所以我求助于 SO 寻求帮助。是否有可能在 constexpr 运算符“”中调用递归 lambda?如果有,有什么提示?
谢谢,