c++ - 是否可以使用 static_cast 从可变枚举创建 boost::mpl::list_c?

标签 c++ boost enums

以下代码无法编译:

#include <boost/mpl/list_c.hpp>
enum class DataType : int {
  t1 = 0,
  t2 = 1,
  t3 = 2
};
int main()
{
  boost::mpl::list_c<DataType, DataType::t1, DataType::t2> lc2;
}

我必须转换我的值(value)观,像这样(编译):

#include <boost/mpl/list_c.hpp>
enum class DataType : int {
  t1 = 0,
  t2 = 1,
  t3 = 2
};
int main()
{
  boost::mpl::list_c<int, static_cast<int>(DataType::t1), static_cast<int>(DataType::t2)> lc2;
}

我还可以从类型的可变列表创建列表,像这样(也可以编译):

#include <boost/mpl/list_c.hpp>
template<int... ints>
void create_list() {
  boost::mpl::list_c<int, ints...> lc;
}
int main()
{
  create_list<1,2,3>();
}

但是,我如何从如下所示的可变类型列表创建列表(不编译):

#include <boost/mpl/list_c.hpp>
enum class DataType : unsigned char {
  t1 = 0,
  t2 = 1,
  t3 = 2
};
template<DataType... datatypes>
void create_list() {
  boost::mpl::list_c<DataType, datatypes...> lc;
}
int main()
{
  create_list<DataType::t1, DataType::t2>();
}

这会产生以下编译器错误:

 In instantiation of 'void create_list() [with DataType ...datatypes = {(DataType)0u, (DataType)1u}]':
13:43:   required from here
9:46: error: could not convert template argument '(DataType)0u' to 'long int'
9:46: error: could not convert template argument '(DataType)1u' to 'long int'

我在调用 create_list 函数时也无法转换,如下所示:

create_list<static_cast<unsigned char>(DataType::t1), static_cast<unsigned char>(DataType::t2)>();

因为,我的可变类型列表已被我的客户传递。

最佳答案

A list_cintegral_c 序列的便利生成器

引用:http://www.boost.org/doc/libs/1_64_0/libs/mpl/doc/refmanual/list-c.html

integral_c<T, TN>T 处被记录为受支持是整型

enum class不是整数类型。我认为讨论到此结束。

引用:http://www.boost.org/doc/libs/1_64_0/libs/mpl/doc/refmanual/integral-c.html

关于c++ - 是否可以使用 static_cast 从可变枚举创建 boost::mpl::list_c?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44032598/

相关文章:

c# - 在 C# 中使用枚举作为泛型类型参数

c++ - 如何在 Windows 上的 CMakelist.txt 中包含 Eigen 库

c++ - 我什么时候应该防止隐式破坏?它是如何工作的?

c++ - Boost::Function 和 Boost::Bind 的替代方案

c++ - 将 boost IOStreams 与 std::ostream_iterator 结合使用

c++ - 如何从 QMetaType 中获取结构成员的名称?

java - 如何在 Java 中的 Enum 中声明字段?

c++ - 如何在 Eigen 中翻译矩阵(4x4)?

c++ - 颠倒句子中单词的顺序

c++ - 如何在集群上链接 boost 库?