gpt4 book ai didi

C++,通过模板参数选择函数

转载 作者:行者123 更新时间:2023-11-28 02:02:10 25 4
gpt4 key购买 nike

我的问题是如何在不使用映射的情况下通过运行时已知的 id 调用其中一个 process 函数?

#include <iostream>
#include <map>

enum id
{
id_1,
id_2,
id_3
};

template <id id_>
void process();

template<>
void process<id_1>()
{
std::cout << "1" << std::endl;
}

template<>
void process<id_2>()
{
std::cout << "2" << std::endl;
}

template<>
void process<id_3>()
{
std::cout << "3" << std::endl;
}

std::map<id, void(*)()> mapping =
{
{id_1, process<id_1>},
{id_2, process<id_2>},
{id_3, process<id_3>}
};

int main()
{

for (int i = 0; i < 10; ++i)
{
mapping[static_cast<id>(rand()%3)]();
}

return 0;
}

最佳答案

map 是一个优雅的解决方案。

如果您不想使用map,您必须自己“映射”函数调用。

switch-case

void mapped_process(id id_) {
switch (id_) {
case id_1:
process<id_1>();
break;
case id_2:
process<id_2>();
break;
case id_3:
process<id_3>();
break;
default:
break;
}
}

mapped_process(static_cast<id>(rand()%3);

map by index

正如提到的评论之一,您可以使用 arrayvector 来替换 map 并带有一些约束:枚举具有唯一值.

std::array<void(*)(), 3> procs = {process<id_1>, process<id_2>, process<id_3>};

procs[rand() % 3]();

关于C++,通过模板参数选择函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39015662/

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