首页 > 解决方案 > 减轻头文件中的长限定

问题描述

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));
}

但同时我不想把 ausing namespace boost::hana;放在顶层,因为客户端代码的命名空间会被boost::hana(或来自其他命名空间的)名称弄乱,更不用说一些编译器很难处理using namespace通用 lambdas 中的指令

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

标签: c++namespacesc++17header-filesusing

解决方案


想一想,我可以通过构建并动态调用一个 lambda 从void(因此()介于[]{}可以删除)到所需的 lambda 来解决这个问题:

namespace utils {

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

}

推荐阅读