- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我设法转换了一个 template<int ...Args> struct List
到 integral_constant
的列表但是,是否可以从 integral_constant
转换为回到int
是吗?
以下是我如何从 IntList
进行转换至 List
:
template<typename ...Args>
struct List;
template<typename T>
struct ListFromTupleImpl;
template<typename ...Args>
struct ListFromTupleImpl<std::tuple<Args...>>
{ using type = List<Args...>; };
template<typename T>
using ListFromTuple = typename ListFromTupleImpl<T>::type;
template<typename ...Args>
using TupleCat = decltype(std::tuple_cat(std::declval<Args>()...));
template<typename ...Args>
using ListFromTupleCat = ListFromTuple<TupleCat<Args...>>;
template<int ...Args>
struct IntList;
template<typename ...Args>
struct List
{
template<typename T>
struct Concat;
template<typename ...Args0>
struct Concat<List<Args0...>>
{
using type = ListFromTupleCat<std::tuple<Args...>,
std::tuple<Args0...>>;
};
};
template<int ...Args>
struct IntList
{
template<int first, int ...Args0>
struct ListBuilder
{
using type = typename List<std::integral_constant<int, first>>::
template Concat<typename ListBuilder<Args0...>::type>::type;
};
template<int last>
struct ListBuilder<last>
{
using type = List<std::integral_constant<int, last>>;
};
using asList = typename ListBuilder<Args...>::type;
};
最佳答案
你可以通过让编译器匹配模板模式来做你想做的事:
template<typename... Ts>
auto to_int_list_helper(List<Ts...>) {
return IntList<Ts::value...>{};
}
template<typename ListParam>
using AsIntList = decltype(to_int_list_helper(ListParam{}));
和概念证明:
using L = typename IntList<1,2>::asList;
static_assert(is_same<L, List<integral_constant<int, 1>, integral_constant<int, 2>>>::value, "");
using BackToIntList = AsIntList<L>;
static_assert(is_same<IntList<1,2>, BackToIntList>::value, "");
由于您还询问了串联,因此利用相同的技术非常简单:
template<int... Ts, int... Us>
auto concat_int_lists_helper(IntList<Ts...>, IntList<Us...>) {
return IntList<Ts..., Us...>{};
}
template<typename A, typename B>
using ConcatIntLists = decltype(concat_int_lists_helper(A{}, B{}));
关于c++ - 是否可以将 `integral_constant` 的列表转换回 `T` 的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40095629/
MSVC 和 clang/gcc 对于是否可以在三元运算符中使用两个不同的整型常量(以及它们是否具有 common_type)存在分歧: #include int main() { retu
我想将传递给函数的编译时间常量整数捕获为模板类型。 future 的目标是推出我自己的(非常有限的)表达式模板,该模板从非常简单的表达式(编译时常量 int 和 in 变量的总和)创建表达式,例如:-
我刚刚进入元编程,正在 youtube 上观看 Cppcon channel ,并看到了这个 std::integral_constant ,但找不到它的用途。 据我所知,这是一种将值与其类型一起“打
您能否解释一下,为什么以下示例中的 integral_constant 和 constexpr 方法会导致不同的行为? #include using namespace std; struct Lo
利用Scott Schurr's str_const我有一个 constexpr 字符串。 class StrConst { public: template constexpr St
它的实际用例是什么? std::integral_constant 我可以理解这是一个值为 2 的包装器: typedef std::integral_constant two_t 但为什么不直接使用
考虑这段代码 #include #include enum Thing {Thing0, Thing1, Thing2, NumThings}; enum Object {Object0, Obj
在C++标准库中,有没有对integral_constant进行 bool 运算的模板类型? (其中 X 是 true 或 false )? 作为一个简单的例子,您有两个这样的函数重载: void f
昨天我读了一个blog entry关于将编译时已知函数参数从 constexpr 函数转换为类似 std::integral_constant<> 的类型. 一个可能的用法示例是从用户定义的文字转换类
我想创建一个 std::integral_constant 的“容器版本”。这是一个用元素类型和非类型参数参数化的类型: enum class A { a = 1 struct static
很抱歉问了这么简单的问题,但我无法轻易找到答案。 Google 对“C++ 否定 integral_constant”和类似查询没有任何有趣的说法。 在 C++11 中是否有任何特征使 std::tr
查看 std::is_same 的实现我们可以看到一些内部函数(继承自 integral_constant )。为了方便起见,让我复制 g++ 代码: template struct inte
我有几种类型,我想“绑定(bind)”一个 std::integral_constant编译时每种类型的顺序 ID 值。 例子: struct Type00 { }; struct Type01 {
我设法转换了一个 template struct List到 integral_constant 的列表但是,是否可以从 integral_constant 转换为回到int是吗? 以下是我如何从 I
#include #include int main(){ //creating an integral constant with constexpr constexpr uns
我想从 char* 和“kernel32.dll”中获取整数常量,但总是失败。以下是我失败的尝试,谁能告诉我正确的用法? error 1: cout ::value ::value ::value (
在C++14标准中,std::integral_constant模板定义如下: template struct integral_constant { static constexpr T va
#include #include #include #include template auto make_index_dispatcher(std::index_sequence) {
假设我有一个 hana::integral_constant 的元组,如下所示: auto tuple_of_int_const = hana::make_tuple(hana::integral_c
从 C++20 开始可以使用 auto实现整数常量的模板参数: Try it online! template struct integral_constant2 : std::integr
我是一名优秀的程序员,十分优秀!