gpt4 book ai didi

c++ - 使用带数字的模板函数

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

我创建了模板函数,它允许我用任何类型的数字、int、double 等来调用它...

要调用这个函数,我需要知道一个数字,为​​了得到这个数字,我从控制台 (std::cin) 读取它。

我想知道 - 如果我必须声明变量类型才能将其传递给函数,那么使用模板的目的是什么?我的意思是,我不会问用户他想传递什么类型的数字,我肯定不会为所有数据类型执行切换循环以不同地调用函数。

如果有什么不够清楚,让我举一些简单的例子:

template <typename T>
T sum(T a, T b)
{
return a + b;
}

int main()
{
using namespace std;
int a, b; // here, this line

cout << "Provide first number: ";
cin >> a;
cout << "Provide second number: ";
cin >> b;
sum(a, b);
}

我一直在考虑创建另一个模板函数,如 loadVariable(),返回加载的变量,如:

template <typename T>
T loadVariable(string text)
{
T var = new T;
cout << text;
cin >> var;
return var;
}

然后就做这样的事情:

int main()
{
using namespace std;
sum(loadVariable("Provide first number: "), loadVariable("Provide second number: ");
}

但是,它看起来很丑。

这是使用这种功能的好习惯吗?

或者也许还有其他一些我不知道的很酷的方法?

最佳答案

模板有助于避免代码重复 (Do not repeat yourself)从开发和维护的角度来看(尽管编译器会为每个特化生成代码)。它们还用于使用 template metaprogramming 执行各种编译时任务与运行时任务。 .

由于 C++ 是静态类型的,因此必须在编译时知道类型,因此必须对其进行声明。有关可以包含多种类型之一的类,请参见 boost::variant。

我认为你在这里关于模板的问题更多的是关于静态类型语言和动态类型语言的问题。我没有检查过,但我认为 loadVariable() 概念不会编译,因为未指定模板参数,编译器无法从调用本身派生特化。你必须有 loadVariable<int>()loadVariable<double>()指定模板参数的地方。

问题是您需要区分整数类型还是浮点类型。因为您可以将输入变量声明为 double,它可以包含任何一个。

这可能只是为了帖子的示例目的而编写的代码,但此函数是否存在内存泄漏?

template <typename T>
T loadVariable(string text)
{
T var = new T;
cout << text;
cin >> var;
return var;
}

关于c++ - 使用带数字的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16121116/

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