gpt4 book ai didi

c++ - C++ 中的模板语法

转载 作者:太空狗 更新时间:2023-10-29 23:29:16 27 4
gpt4 key购买 nike

我并不真正理解模板,而是试图运行一个简单的查找整数、 double 、字符的最小值。

第一个问题,为什么是template<typename T>有时使用,有时使用 template<>

第二个问题,我不知道我在下面的代码中做错了什么:

#include <iostream>

template <typename T>
T minimum(T arg1, T arg2)
{
return arg1 < arg2 ? arg1 : arg2;
}

template <typename T>
// first I tried template <> instd of above, but wasn't sure the difference
T minimum<const char *>(const char *arg1, const char *arg2)
{
return strcmp(arg1, arg2) ? arg2 : arg1;
}

int main()
{
std::cout << minimum<int>(4, 2) << '\n';
std::cout << minimum<double>(2.2, -56.7) << '\n';
std::cout << minimum(2.2, 2) << '\n';
}

Compile Errors:
error C2768: 'minimum' : illegal use of explicit template arguments
error C2783: 'T minimum(const char *,const char *)' : could not deduce template argument for 'T'
: see declaration of 'minimum'
: error C2782: 'T minimum(T,T)' : template parameter 'T' is ambiguous
: see declaration of 'minimum'

第三,在熟悉分离 .h 和 .cpp 文件时,如果我希望这个 minimum() 函数成为我的类的静态函数,但它是该类中的唯一函数,我是否必须有一个模板类也是如此吗?我最初尝试这样做,而不是将其全部放在一个文件中,但我也遇到了一些编译错误,我现在不记得了,并且不确定我将如何做到这一点。谢谢!

最佳答案

听起来您需要获得(并学习)一本包含封面模板的书——看起来您需要学习太多的基础知识,无法在此处的答案中涵盖。

template<>语法用于模板特化。对于你显然想要的,你会做这样的事情:

template <class T>
T minimum(T const &a, T const &b) {
return a < b ? a : b;
}

template<>
char const *minimum<char const *>(char const *a, char const *b) {
return strcmp(a, b) ? a : b;
}

然而,一般来说,这样做确实是错误的——而不是为 char const * 提供特化。 ,您通常只想使用 std::string ,它提供了一个 operator<所以你的第一个版本可以工作。

关于c++ - C++ 中的模板语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2822487/

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