是否可以使用 static_cast 从可变参数枚举创建 boost::mpl::list_c
Is it possible to create a boost::mpl::list_c from a variadic enum using static_cast?
以下代码无法编译:
#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;
}
我必须铸造我的值,就像这样(编译(:
#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)>();
从那以后,我的可变参数类型列表已被我的客户传递。
list_c
是一系列integral_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
知道了:
#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<unsigned char, static_cast<unsigned char>(datatypes)...> lc;
}
int main()
{
create_list<DataType::t1, DataType::t2>();
}
相关文章:
- 从可变参数创建枚举?
- 创建结构作为枚举类成员
- 在编译时从 c++ 文件创建枚举
- 我正在尝试创建一个枚举,但得到了"identifier expected error"
- 是否可以使用 static_cast 从可变参数枚举创建 boost::mpl::list_c
- 一种创建将字符串常量返回给枚举的类的廉价方法,反之亦然
- 我可以创建一个可以接受任何枚举的模板(非类型)param类吗?C 11
- 创建一个 std::vector 的枚举
- 如何使用枚举元素创建对象
- 在创建C 枚举和依赖数据结构时,如何避免重复自己
- C/C++ 创建具有负值的枚举,而无需对其进行编号
- 在Python中创建SWIG枚举
- C++使用模板为特定的枚举值创建方法
- 从大量的枚举中,我尝试通过使用一些模板技巧来创建一个函数来应用正确的操作,而无需使用开关主体
- 不是创建模板类后的类、命名空间或枚举
- 方便地为枚举定义按位运算符,以创建位标志
- 如何干净地创建类型安全的枚举参数
- 我怎样才能创建类似模板的东西,我自己的枚举
- 有没有一种方法可以为非整数创建枚举数据类型
- visual studio 2008 - c++:如何在函数中创建枚举