如何解决结构内部带有模板参数的函数指针
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 举报,一经查实,本站将立刻删除。