减轻头文件中的长限定条件

Alleviate long qualifications in header files

我在头文件中定义了一个inline函数对象,像这样:

// fmap.hpp
namespace util {
    inline auto constexpr fmap = boost::hana::curry<2>(boost::hana::flip(boost::hana::transform));
}

客户端代码可以简单地#include "fmap.hpp"并开始使用util::fmap

到目前为止一切顺利。

但有时此类对象的定义可能难以阅读,如果它们充满了 qui::quo::qua::lify

我该如何缓解这种情况?

理想情况下,我希望 fmap 的定义如下所示:

namespace util {
    inline auto constexpr fmap = curry<2>(flip(transform));
}

但同时我不想在顶层放置 using namespace boost::hana;,因为 client code's namespace would be cluttered with boost::hana (or from other namespaces) names, not to mention that

是否有一些 C++ 指南或最佳实践可以在这种情况下派上用场?

考虑一下,我可以通过从 void 构建并动态调用一个 lambda 来解决这个谜题(因此 []{} 之间的 ()可以删除)到所需的 lambda:

namespace utils {

inline auto constexpr fmap = []{
    using namespace boost::hana;
    return curry<2>(flip(transform));
}();

}