gpt4 book ai didi

c++ - 我怎样才能制作一个可以在 C++ 中更改的函数的结构?

转载 作者:行者123 更新时间:2023-11-30 01:38:09 24 4
gpt4 key购买 nike

我想制作一个可以初始化的结构,以便在不使用 if 或 switch 语句的情况下,该结构显示用户在开始时选择的功能。类似于 C# 中的 readonly。因此,在声明一个包含函数 f() 的结构 S 之后,例如,f() 应该不同 如果我将结构声明为 S("a")S("b")

  1. 这可能吗?
  2. 如果是,怎么样?

最佳答案

您可以使用 function pointer ,或其他可调用对象。你可以把这些东西放在 map 中,然后在构造 S

时在 map 中查找
void f_A() { std::cout << "called a"; }
void f_B() { std::cout << "called b"; }

std::map<std::string, void(*)()> functions = { { "a", f_A }, { "b", f_B } };

struct S
{
S(std::string id) : f(functions[id]) {}
void(*f)();
}

int main()
{
S a("a");
S b("b");
a.f();
b.f();
return 0;
}

如果您需要S 有其他状态,而f 需要使用它,您可以这样修改示例:

struct S; // need to forward declare S

void f_A(S* s) { std::cout << "called a with " << s->foo; }
void f_B(S* s) { std::cout << "called b with " << 2 * s->foo; }

std::map<std::string, void(*)(S*)> functions = { { "a", f_A }, { "b", f_B } };

struct S
{
S(std::string id, int foo_) : f_impl(functions[id]), foo(foo_) {}
void f() { f_impl(this); }
int foo;
private:
void (*f_impl)(S*);
}

关于c++ - 我怎样才能制作一个可以在 C++ 中更改的函数的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48517950/

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