C++ 如何断言模板枚举类型?(C+;+;11) 枚举片段类型 { 不分等级,典当,骑士,主教,车,皇后,国王, AllPieces=0, PieceType\u N=8 }; 模板分数外推评估器() { 静态_断言(T==Bishop | | T==Knight);//不编译。。。。。 }

C++ 如何断言模板枚举类型?(C+;+;11) 枚举片段类型 { 不分等级,典当,骑士,主教,车,皇后,国王, AllPieces=0, PieceType\u N=8 }; 模板分数外推评估器() { 静态_断言(T==Bishop | | T==Knight);//不编译。。。。。 },c++,c++11,enums,C++,C++11,Enums,我想确保模板函数只能用于某些类型的枚举值,在这里的例子中是Bishop和Knight。std::is_scalar()、std::is_enum()和其他类型支持在我的例子中似乎不起作用。如何实现它?问题不在枚举中。您只需将消息添加到static\u assert: enum PieceType { NoPieceType, Pawn, Knight, Bishop, Rook, Queen, King, AllPieces = 0, PieceType_N = 8 };

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

问题不在枚举中。您只需将消息添加到
static\u assert

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.....
}

问题不在枚举中。您只需将消息添加到
static\u assert

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.....
}

来自的
静态断言的语法

你需要提供一条信息。比如:

static_assert ( bool_constexpr , message );

来自的
静态断言的语法

你需要提供一条信息。比如:

static_assert ( bool_constexpr , message );

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

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

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

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