模板功能

发布于 2024-11-05 12:19:30 字数 136 浏览 0 评论 0原文

谁能描述以下声明?

template<> float func<float>(char *txt)
{
blah blah 
}

第二个<>是什么?为了?

Can anyone describe the following declaration?

template<> float func<float>(char *txt)
{
blah blah 
}

What is the second <> for?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

如歌彻婉言 2024-11-12 12:19:30

template<> 表示此函数是模板特化。第二个 表示这是 float 的特化。

例如:

#include <iostream>

template <class T> void somefunc(T arg) {
    std::cout << "Normal template called\n";
}

template<> void somefunc<float>(float arg) {
    std::cout << "Template specialization called\n";
}

int main(int argc, char *argv[]) {
    somefunc(1); // prints out "Normal template called"
    somefunc(1.0f); // prints out "Template specialization called"

    return 0;
}

The template<> means that this function is a template specialization. The second <float> means that this is the specialization for float.

For example:

#include <iostream>

template <class T> void somefunc(T arg) {
    std::cout << "Normal template called\n";
}

template<> void somefunc<float>(float arg) {
    std::cout << "Template specialization called\n";
}

int main(int argc, char *argv[]) {
    somefunc(1); // prints out "Normal template called"
    somefunc(1.0f); // prints out "Template specialization called"

    return 0;
}
撧情箌佬 2024-11-12 12:19:30

这是一个专门的模板函数。当您尝试专门化通用模板函数时,就会发生这种情况。
通常你会遇到另一个减速,因为

template<typename T> float func(char *txt) {
    T vars[1024];
    blah blah
}

有时你想为特定类型 T 做一个专门的声明。在前面的例子中,如果 T 是 bool 类型,你可能想要改变 vars 数组的行为以节省一些空间(因为每个 bool条目可能仍需要 32 位)。

template<> float func<bool>(char *txt) {
    int vars[32];
    blah blah
}

通过定义专门的版本,您可以按位操作 vars 数组
方式。

This is a specialized template function. It happens when you try to specialized a generic template function.
Usually you will have another deceleration as

template<typename T> float func(char *txt) {
    T vars[1024];
    blah blah
}

It happens sometime you want to do a specialized declaration for certain type T. In previous example, if T is bool type, you might want to change the behavior of vars array to save some space (because each bool entry might still take 32bits).

template<> float func<bool>(char *txt) {
    int vars[32];
    blah blah
}

By defining a specialized version, you are allowed to manipulate the vars array in bit-wise
manner.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文