gpt4 book ai didi

c++ - 使用模板元编程计数?

转载 作者:可可西里 更新时间:2023-11-01 16:38:25 25 4
gpt4 key购买 nike

一段时间以来,我一直在尝试为这个问题想出一个创造性的解决方案(开启和关闭),但我还没有做到。我最近认为它可能可以通过模板元编程来解决,但由于我相对缺乏该技术的经验,我不确定。

是否可以使用模板元编程(或 C++ 语言的任何其他机制)来计算从某个基类派生的类的数量,以便为每个派生类分配一个唯一的静态类标识符?

提前致谢!

最佳答案

没有。这是一个在实践中经常出现的问题,据我所知只有两种解决方案:

  1. 手动为每个派生类分配 ID。
  2. 以非确定性方式动态地延迟生成 ID。

你做第二个的方式是这样的:

class Base
{
virtual int getId() const = 0;
};

// Returns 0, 1, 2 etc. on each successive call.
static int makeUniqueId()
{
static int id = 0;
return id++;
}

template <typename Derived>
class BaseWithId : public Base
{
static int getStaticId()
{
static int id = makeUniqueId();
return id;
}

int getId() const { return getStaticId(); }
};

class Derived1 : public BaseWithId<Derived1> { ... };
class Derived2 : public BaseWithId<Derived2> { ... };
class Derived3 : public BaseWithId<Derived3> { ... };

这为您提供了每个类的唯一 ID:

Derived1::getStaticId(); // 0
Derived2::getStaticId(); // 1
Derived3::getStaticId(); // 2

但是,这些 ID 是延迟分配的,因此您调用 getId() 的顺序会影响返回的 ID。

Derived3::getStaticId(); // 0
Derived2::getStaticId(); // 1
Derived1::getStaticId(); // 2

这是否适合您的应用程序取决于您的特定需求(例如,不利于序列化)。

关于c++ - 使用模板元编程计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8596490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com