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

c++ return type of function to be a function of it's input

本文关键字:函数 输入 类型 返回 C++      更新时间:2023-10-16

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

例如:

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

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

1 <> int
2 <> float

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

std::vector<Table> tables = room.get_contents(Room::TABLE);
std::vector<Chair> chairs = room.get_contents(Room::CHAIR);

第一个问题可能不是这个问题的最佳解决方案,尽管如此,我想知道它是否可能。还有,什么是最好的模式来做我想要的?

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

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

语言不允许你这样做。

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

你能做的:

  • 使用两个不同的函数并调用相应的函数
  • 有一个共同的返回类型,例如基类指针或引用。

你可以为函数使用模板,但是你必须显式地将类型作为模板参数传递,它总是必须在编译时知道,不能从输入中自动推断:

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

命名为:

product<int>(3,2);

(抽象示例,可能在您正在做的事情中不太有用)