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

c – 有没有办法在实例化特定的类模板(特化)时调用初始化函数?,第1张

概述我正在设计一个包含各种计算功能的包装器.一些底层后端需要在进行任何其他API调用之前调用一些init函数.我可以使用一些在main之前初始化的静态变量,并将其包装在 here所描述的某个函数中,以便我可以捕获初始化期间产生的任何错误. 我想知道是否有更好的方法来处理这个问题.请注意,永远不会有类模板的实例,因为一切都是typedef或static成员. 为了解决仅针对某些特化而初始化API的问题, 我正在设计一个包含各种计算功能的包装器.一些底层后端需要在进行任何其他API调用之前调用一些init函数.我可以使用一些在main之前初始化的静态变量,并将其包装在 here所描述的某个函数中,以便我可以捕获初始化期间产生的任何错误.

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

解决方法 为了解决仅针对某些特化而初始化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 constemplate <typename T>typename Wrapper<T>::CtorClass Wrapper<T>::static_ctor;struct NeedInit{};// you will have to use static_ctor in every funcition of thetemplate <>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();}

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

然后,你可以像你说的那样捕捉错误.

总结

以上是内存溢出为你收集整理的c – 有没有办法在实例化特定的类模板(特化)时调用初始化函数?全部内容,希望文章能够帮你解决c – 有没有办法在实例化特定的类模板(特化)时调用初始化函数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1227630.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存