相关疑难解决方法(0)

C++是否有标准的编译时类型容器?

(这个问题有一个Nim的答案,提到了boost :: mpl :: map.)

标准C++中是否有可以保存类型的编译时容器?

一个用法示例是:

compiler::vector foo{char, short, long, long long};

template <int N>
void bar(foo[N] param){/*do something and return foo[N]*/}
Run Code Online (Sandbox Code Playgroud)

c++

5
推荐指数
1
解决办法
927
查看次数

更改类型而不更改位

我想把一个堆栈变量和reinterpret cast它变成一个大小相同的无符号整数类型.例如,我可能想要获取double值并将其转换为a uint64_t,并且不会修改位.我想以通用的方式做到这一点.

如果我正在处理指针,我会使用reinterpret_cast<uint64_t*>(double_ptr).

我提出了一个解决方案,它使用了一个肮脏的黑客reinterpret_cast,并且是有效的,但它需要相当多的元编程来获得一个相当简单的结果.

问题是:有更好的方法吗?我确信有,并且我正在使这比需要更复杂.

我确实考虑过使用类型T和尺寸合适的模板化联合int_t,但这看起来甚至更黑,并且似乎与未定义的行为一起玩.

编辑我理解标准没有指定double应该是64位,如注释中所指出的那样.但是使用通用方法,我将能够获得与double相同大小的无符号整数类型,无论大小如此.

#include <iostream>

template <typename T, std::size_t S>
struct helper {};

template <typename T>
struct helper<T, 1> {
    using type = uint8_t;
};
template <typename T>
struct helper<T, 2> {
    using type = uint16_t;
};
template <typename T>
struct helper<T, 4> {
    using type = uint32_t;
};
template <typename T>
struct helper<T, 8> {
    using type = uint64_t; …
Run Code Online (Sandbox Code Playgroud)

c++ types casting c++11

1
推荐指数
1
解决办法
326
查看次数

标签 统计

c++ ×2

c++11 ×1

casting ×1

types ×1