【发布时间】:2022-06-10 19:04:32
【问题描述】:
我的问题是我想获取 integer_sequence 元素的索引。非常幼稚的版本如下。我想要一个元函数在枚举类型上使用可变参数模板,并将 integer_sequence 和需要索引的类型作为输入。 Monster.hpp 中存在类似的东西。我最好避免只为一个函数导入整个包(它不是最小的)。
#include <iostream>
#include <utility>
using namespace std;
namespace animalsExperiment{
///////////////////////////////////////////////////////////////////////////////
enum class Animals {
CAT = 15,
DOG = 19,
RABBIT = 43
};
///////////////////////////////////////////////////////////////////////////////
constexpr auto AllAnimals = integer_sequence<
Animals,
Animals::CAT,
Animals::DOG,
Animals::RABBIT
>{};
template<Animals P>
constexpr int animalIndex = 0;
///////////////////////////////////////////////////////////////////////////////
template<>
constexpr int animalIndex<Animals::DOG> = 1;
///////////////////////////////////////////////////////////////////////////////
template<>
constexpr int animalIndex<Animals::RABBIT> = 2;
}
【问题讨论】:
-
我会使用
-1或std::numeric_limits<int>::max()而不是0来表示“未找到” -
完全同意。这是一个简化的示例,实际上 0 是上例中 Animals::CAT 的正确值。我把它缩短了。对于所有情况,默认为无效值和显式表达式当然更干净。
标签: c++ c++17 variadic-templates constexpr template-meta-programming