【发布时间】:2019-06-04 08:19:07
【问题描述】:
假设有 N 个函数接受不同的输入并返回不同的值:
int h(int);
string g(int);
double f(string);
当然也可以这样写:
f(g(h(4)))
现在假设我想将这些函数 f,g,h 存储到一种容器中,例如:
Container c;
c.add(h);
c.add(g);
c.add(f);
给定第一个函数的输入(在 f 的情况下为 int),我希望这些函数按顺序执行,每个函数都将前一个函数的输出作为输入。
您认为在 C++ 中可能吗?可能不使用 dynamic_cast 和使用 C++11
【问题讨论】:
-
在运行时将所有函数放在一个容器中会很困难,因为它们都有不同的类型。
-
Container是否需要在运行时修改?如果我们在编译时添加函数可以吗? -
Container可以有三个字段来存储三个不同的函数指针,add可以是设置各自函数指针的三个重载设置器,最后Container有一个函数来执行f(g(h()))来电。 -
@NeilButterworth:我将句子解析为“没有
dynamic_cast,使用C++11” -
@svoltron 至于编译时解决方案(不需要
std::function开销),请查看这个:stackoverflow.com/questions/54076787/…。问题是如何获得最终类型,但解决方案只是构建调用表达式,然后执行decltype,所以跳过后者。
标签: c++ c++11 inheritance types template-meta-programming