我一直都这么问,但我从来没有得到过一个非常好的答案; 我认为,在写第一个"Hello World"之前,几乎所有程序员都遇到过"宏不应该使用宏","宏是邪恶的"这样的短语等等,我的问题是:为什么?有了新的C++ 11,这么多年后还有一个真正的选择吗?
简单的部分是关于宏#pragma,特定于平台和特定于编译器,并且大多数时候它们具有严重的缺陷,例如#pragma once在至少两种重要情况下容易出错:不同路径中的相同名称以及一些网络设置和文件系统.
但总的来说,宏的用法和替代品呢?
P1061“结构化绑定可以引入包”提供了一种方便的解决方案,但目前尚不可用。
我想要实现的是为聚合类型提供类似元组的接口。
(std::get<N>(T),std::tuple_element_t<T>, ETC。)。
我已经有一个计算字段的函数,所以我现在正在寻找一种 - 甚至是棘手的方法 - 来实现以下功能:
template <std::size_t N>
constexpr auto as_tuple(auto && value) noexcept {
auto & [ /* N identities ...*/ ] = value;
return std::tuple/* of references */{ /* N identities... */ };
}
Run Code Online (Sandbox Code Playgroud)
充满绝望,我使用预处理器尝试了一些想法(免责声明:不是我喜欢的),但没有可扩展的结果。
template <std::size_t N>
constexpr auto as_tuple(auto && value) noexcept {
auto & [ /* N identities ...*/ ] = value;
return std::tuple/* of references */{ /* N identities... */ };
} …Run Code Online (Sandbox Code Playgroud)