繁体   English   中英

如何static_assert模板枚举类型? (C ++ 11)

[英]How to static_assert template enum types? (C++11)

enum PieceType
{
    NoPieceType, Pawn, Knight, Bishop, Rook, Queen, King,
    AllPieces = 0,
    PieceType_N = 8
};

template<PieceType T> Score OutpostEvaluator()
{
    static_assert(T == Bishop || T == Knight); // Doesn't compile.....
}

我想确保模板函数只能用于某些类型的枚举值,在此例中为Bishop和Knight。 std :: is_scalar(),std :: is_enum()和其他类型支持在我的情况下似乎不起作用。 我该如何实现?

来自http://en.cppreference.com/w/cpp/language/static_assert的 static_assert语法。

static_assert ( bool_constexpr , message );

您需要提供一条消息。 就像是:

static_assert(T == Bishop || T == Knight, "Expected Bishop or Knight");

问题不在枚举中。 您只需要向static_assert添加一条消息:

static_assert(T == Bishop || T == Knight, "message");

在C ++ 11中, static_assert需要一条消息,但是n3928static_assert建议一个默认的字符串文字,允许您忽略该消息。 这已在Clang中以C ++ 1z模式实现,并已作为C ++ 1y / 14模式中的扩展实现。

static_assert(0);

现场例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM