是否有任何std::empty结构或类似的东西或我需要定义自己的:
struct empty{};
Run Code Online (Sandbox Code Playgroud)
这可以非常好地与std::conditional其他新标准功能结合使用,我想知道标准是否定义了它.
它在标头<variant>中定义为std::monostate
struct monostate { };
Run Code Online (Sandbox Code Playgroud)
例如,它用于std::variant(类型安全联合),其中std::variant<std::monostate>表示空变体。Monostate 使变体可以默认构造。
在c ++标准库中没有这样的东西.正如评论中所提到的,你仍然可以boost::blank在Boost中找到可能与你正在寻找的类最相似的东西.如果标准库中存在这样的类,我认为没有那么多第三方库定义自己的类struct empty {}.
如果你想要的只是一个没有数据成员和最小可能大小的类 - 不能小于1 - (并且可能从空基优化中受益),你仍然可以使用std::tuple<>.它实际上用于libstdc ++中某些类的实现中的确切目的(空基优化).
如果你想确保std::tuple<>真的是一个空类:
#include <iostream>
#include <tuple>
#include <type_traits>
int main()
{
// prints 1
std::cout << std::is_empty< std::tuple<> >::value;
}
Run Code Online (Sandbox Code Playgroud)
有一部分将这种构造添加为Variant提案(n4542)的一部分。
经过投票后,
我们要如何称呼“ empty_t”替代类型?
empty_t 4
空4
one_t 1
空白6
blank_t 7
单态7径流:
空白* 3
单态8
约定的名称为:std :: monostate。
可以通过以下方式定义:
// 2.?, Explicitly default-constructed alternative
struct monostate {};
bool operator<(const monostate&, const monostate&) constexpr
{ return false; }
bool operator>(const monostate&, const monostate&) constexpr
{ return false; }
bool operator<=(const monostate&, const monostate&) constexpr
{ return true; }
bool operator>=(const monostate&, const monostate&) constexpr
{ return true; }
bool operator==(const monostate&, const monostate&) constexpr
{ return true; }
bool operator!=(const monostate&, const monostate&) constexpr
{ return false; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7342 次 |
| 最近记录: |