微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

结构内部带有模板参数的函数指针

如何解决结构内部带有模板参数的函数指针

enum VasaType { BASE = 0,PERENTITY = 1,ASYNC = 2,VECTORED = 4};

 
template <typename T>
using func = void(*)(T);
template <typename T>
void callv(T request) {
    //reqEntities.push_back(request->srcVVolId);
}
template <typename T>
void callc(T request) {
    //reqEntities.push_back(request->eid);
}
struct VASAApiInfo {
   VasaType type : 3;
   template <typename T>
   func<T> fn(T request);
  //void (*fn)(T);
};

static std::vector<struct VASAApiInfo> apiInfoVec = {
  
   {(VasaType)(VasaType::PERENTITY | VasaType::ASYNC),callc},// createVirtualVolume
   {VasaType::PERENTITY,callv}                           // deleteVirtualVolume
  
};

我收到以下编译错误

prog.cpp:221:1: error: Could not convert ‘{{((VasaType)(1 | 2)),{PERENTITY,callv}}’ from ‘<brace-enclosed initializer list>’ to ‘std::vector<VASAApiInfo>’
 };

我需要一种具有在结构内部使用模板参数的函数指针的方法

解决方法

由于您希望函数指针位于结构中,因此必须在编译时知道函数指针的类型。您可以做的是使您的struct这样的模板:

template <typename T>
struct VASAApiInfo {
    VasaType type : 3;
    void (*fn)(T);
};

请注意函数指针成员的语法。

然后可以像这样实例化您的结构模板:

static std::vector<VASAApiInfo<int>> apiInfoVec = {

   {(VasaType)(VasaType::PERENTITY | VasaType::ASYNC),callc},// createVirtualVolume
   {{VasaType::PERENTITY},callv}                           // deleteVirtualVolume

};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。