gpt4 book ai didi

c++ - 有没有办法仅在实例化特定类模板(特化)时调用初始化函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:16:49 25 4
gpt4 key购买 nike

我正在为各种计算功能设计一个包装器。一些底层后端需要在进行任何其他 API 调用之前调用一些 init 函数。我可以使用一些在 main 之前初始化的静态变量,并将其包装在某个函数中,如 here 所述这样我就可以捕获初始化期间产生的任何错误。

我想知道是否有更好的方法来处理这个问题。请注意,永远不会有类模板的实例,因为一切都是 typedef 或静态成员。

最佳答案

为了解决初始化 API 仅为某些特化的问题,并且只初始化一次,我会做这样的事情:

#include <iostream>

template <typename T>
struct Wrapper
{
// class who will be statically instantiated
struct CtorClass
{
CtorClass()
{
std::cout << "Init\n";
}
};

static CtorClass static_ctor;

static void compute1(){}
static void compute2(){}

};

// definition for template static member cons
template <typename T>
typename Wrapper<T>::CtorClass Wrapper<T>::static_ctor;

struct NeedInit{};

// you will have to use static_ctor in every funcition of the
template <>
void Wrapper<NeedInit>::compute1()
{
static_ctor;
}

template <>
void Wrapper<NeedInit>::compute2()
{
static_ctor;
}

int main()
{
Wrapper<int>::compute1();
Wrapper<int>::compute2();
Wrapper<NeedInit>::compute1();
Wrapper<NeedInit>::compute2();
}

遗憾的是,这种方式你必须使用 static_ctor在属于 Wrapper<NeedInit> 的每个函数特化中类(class)。但是您不需要检查是否已调用初始化。

然后,您可以像您说的那样捕获错误。

关于c++ - 有没有办法仅在实例化特定类模板(特化)时调用初始化函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29941064/

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