c++ - 减轻头文件中的长限定
问题描述
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++ 指南或最佳实践可以派上用场?
解决方案
想一想,我可以通过构建并动态调用一个 lambda 从void
(因此()
介于[]
和{}
可以删除)到所需的 lambda 来解决这个问题:
namespace utils {
inline auto constexpr fmap = []{
using namespace boost::hana;
return curry<2>(flip(transform));
}();
}
推荐阅读
- c# - 如何在 ListView 中固定 HeaderColumn 宽度?
- web-applications - 使用python的EventHub触发功能
- java - 为什么 Spring Boot Microservice 的参数 Principal 为 null 值,如何获取客户端应用程序的实际值?
- c# - Xamarin.Forms - KeyNotFoundException:给定的键不在字典 C# 中
- jetbrains-ide - JetBrains IdeaVim 中 Open Recent .. 的操作列表项是什么?
- php - 在 Windows 10 phpMyAdmin 上显示缺少 mysqli 扩展。请检查您的 PHP 配置
- android - Android Studio 单元测试失败
- java - 使用 java.nio.Files 或 java.io 类创建 java.io.BufferedWriter
- wso2 - 登录发布者或商店时未通过对等方身份验证
- android - 一些新添加的方法上未显示 Android Studio API 级别警告