gpt4 book ai didi

c++ - 根据枚举值调用特定的模板函数

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

考虑以下代码,其中我根据枚举值(类别)调用特定模板函数 computecost。在调用案例中,computecost 的参数是相同的。枚举值和 C++ 类型之间存在一对一的对应关系。由于 computecost 的参数在所有调用中始终相同,是否可以更紧凑地编写以下代码,即。无需为每个类型/枚举值重复。

mxClassID category = mxGetClassID(prhs);
switch (category) {
case mxINT8_CLASS: computecost<signed char>(T,offT,Offset,CostMatrix); break;
case mxUINT8_CLASS: computecost<unsigned char>(T,offT,Offset,CostMatrix); break;
case mxINT16_CLASS: computecost<signed short>(T,offT,Offset,CostMatrix); break;
case mxUINT16_CLASS: computecost<unsigned short>(T,offT,Offset,CostMatrix); break;
case mxINT32_CLASS: computecost<signed int>(T,offT,Offset,CostMatrix); break;
case mxSINGLE_CLASS: computecost<float>(T,offT,Offset,CostMatrix); break;
case mxDOUBLE_CLASS: computecost<double>(T,offT,Offset,CostMatrix); break;
default: break;
}

最佳答案

你可以有一个函数接受 category 并返回一个合适的函数指针,然后用合适的参数调用它:

decltype(&computecost<int>) cost_computer(mxClassID const category) {
switch (category) {
case mxINT8_CLASS: return &computecost<signed char>;
...
}
}

cost_computer(mxGetClassID(prhs))(T, offT, Offset, CostMatrix);

或者使用 map,如 Mark 所建议的:

std::map<mxClassID, decltype(&computecost<int>)> compute_functions =
boost::assign::map_list_of
(mxINT8_CLASS, &computecost<signed char>)
// ... and so on
compute_functions[mxGetClassID(prhs)](T, offT, Offset, CostMatrix);

关于c++ - 根据枚举值调用特定的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7356740/

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