【问题标题】:std::unordered map of string - function pairsstd::unordered map of string - 函数对
【发布时间】:2017-11-11 09:23:11
【问题描述】:

我需要将一组函数(来自mpfr::real 库的函数)映射到一组标记,但我不知道如何直接将标记映射到函数。我该怎么做?

【问题讨论】:

  • 显然,对于每个 mpfr 函数,我都编写了一个新的 functor。
  • 直接存储函数怎么样?你写的不是有效的 C++。
  • 这就是我不明白该怎么做。
  • 你能提供更多的上下文吗?你在写什么样的程序?您希望用这些函数做什么(一旦您将它们存储在您的地图中)?
  • 嗯... std::unordered_map> 是我第一次尝试的目标。这假定所有操作数都属于同一类型,这可能是也可能不是。从 mpfr::real 包装器一目了然,可能不是。返回和参数类型是 C++ 中函数签名的一部分,不能丢弃。您可以编写为您想要支持的每种类型提供重载的函子,ofc 并使用 std::unordered_map

标签: c++ stl


【解决方案1】:

我现在使用#define-

定义这样的函子
#define op(opname, ret, argtype, fn, args...) struct opname { ret operator ()argtype { return fn } };

这让我写(例如)-

op(add, real, (real a, real b), mpfr::operator +(a, b))

(real 是 typedef mpfr::real<1024>)

得到-

struct add { real operator ()(real a, real b) { return mpfr::operator +(a, b) } };

这样我就可以快速编写所有类型的函数。

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    相关资源
    最近更新 更多