c ++返回函数类型作为其输入的函数

时间:2015-09-23 21:29:04

标签: c++ c++11

我正在学习c ++我想知道是否有办法定义一个模板,其中返回类型实际上是函数输入的函数。

例如:

str

我想这可以用某种地图来完成?

calling fun(1) would return me an int
calling fun(2) would return me a float

我试图解决的问题是,例如,如果我有一个名为room的对象,我想要一个名为get_contents的函数,我将传递一个enum来定义返回类型。例如:

1 <> int
2 <> float

第一个问题可能不是这个问题的最佳解决方案,但我想知道是否可能。另外,做我想做的最好的模式是什么?

3 个答案:

答案 0 :(得分:6)

在我看来,room.get只需要成为模板,忘记枚举。

std::vector<Table> tables = room.get<Table>();`

答案 1 :(得分:0)

该语言不允许您这样做。

考虑一下,函数的输入可能是一个变量,其值在编译时是未知的。编译器将无法推断出返回类型。

你能做什么:

  • 使用两种不同的功能并调用相应的功能。
  • 有一个共同的退货类型,例如基类指针或引用。

答案 2 :(得分:0)

您可以对函数使用模板,但是您必须显式传递类型作为模板参数,它始终必须在编译时才能知道,无法从输入中自动推断:

template <typename T>
T product(T x, T y) { x * y; }

并将其命名为:

product<int>(3,2);

(抽象的例子,在你正在做的事情上可能没那么有用)