- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有几种类型,我想“绑定(bind)”一个 std::integral_constant
编译时每种类型的顺序 ID 值。
例子:
struct Type00 { };
struct Type01 { };
struct Type02 { };
struct Type03 { };
struct TypeXX { };
struct TypeYY { };
template<typename T> struct TypeInfo
{
using Id = std::integral_constant<int, ???>;
};
int main()
{
cout << TypeInfo<Type00>::Id::value; // Should always print 0
cout << TypeInfo<Type01>::Id::value; // Should always print 1
cout << TypeInfo<Type02>::Id::value; // Should always print 2
cout << TypeInfo<Type03>::Id::value; // Should always print 3
cout << TypeInfo<TypeXX>::Id::value; // Should always print 4
cout << TypeInfo<TypeYY>::Id::value; // Should always print 5
}
问题是我不知道如何跟踪上次使用的 ID。理想情况下,我想要这样的东西:
template<typename T> struct TypeInfo
{
using Id = std::integral_constant<int, lastUsedID + 1>;
};
有什么方法可以定义和跟踪编译时 lastUsedID
?
我该如何解决这个问题?
编辑:
说明:
TypeInfo<...>
需要在用户代码中频繁调用。语法必须保持清晰(用户不需要(需要知道有一个)/(手动增加)编译时计数器) Typeinfo<T>::Id::value
在整个程序中必须始终返回相同的值。初始值将在第一次实例化时“绑定(bind)”到 lastUsedID + 1
.TypeInfo<...>
之前列出所有类型不是一个合适的解决方案。最佳答案
这是不可能的,而且很容易看出原因:考虑两个编译单元。第一单元看到类型 Type00
,但不是 Type01
,而第二单元看到 Type01
而不是 Type00
。 C++(包括 C++11 和 C++14)中没有任何内容可以告诉编译器在两个编译单元中这些类型应该具有的顺序。即使在链接时向目标文件添加一些数据也为时已晚,因为您要求的是编译时值。这是编译单元的基本概念,它为您所要求的功能设置了一个硬性障碍。
关于c++ - 编译时模板 `std::integral_constant` 计数器 - 如何实现它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25916933/
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
我是一名优秀的程序员,十分优秀!