当前位置: 首页 > 知识库问答 >
问题:

如何编写函数模板的显式专门化(字符串的气泡排序数组)

钱经业
2023-03-14

首先,我对c其实是个新手。我必须用显式专门化来编写函数模板,以便对整数数组和字符串数组进行排序。

我的主要节目

#include <iostream>
#include "sort.h"

int main() {
    int a[] = { 1234, 546, 786, 2341 };
    char* c[6] = { "Harry", "Jane", "Anne", "John" };

    sort(a, 4);
    sort(c, 4);

    for (int i = 0; i < 4; i++)
        std::cout << a[i] << std::endl;
    std::cout << std::endl;

    for (int i = 0; i < 4; i++)
        std::cout << c[i] << std::endl;
    std::cout << std::endl;
}

sort. h文件(包含模板的文件)

template<typename T, typename T1>
void sort(T* items,  T1 count) {
    T1 t;

    for (int a = 1; a<count; a++)
    for (int b = count - 1; b >= a; b--)
    if (items[b - 1] > items[b]) {
        t = items[b - 1];
        items[b - 1] = items[b];
        items[b] = t;
    }
}

问题就在这里:它说:“错误C2912:显式专门化‘void sort(char*,int)’不是函数模板的专门化”我对“char*c[]”以及如何对这种类型进行专门化感到困惑。

 template<>
    void sort<char ** >(char** p, int count)    
    { 





    }

共有1个答案

太叔京
2023-03-14

您必须完全匹配主模板签名,例如:

template <>
void sort<char *, int>(char ** p, int count)
{
    // ...
}

所以T=char*T1=int

 类似资料:
  • 在本文中,他们说(c)是(b)的显式专门化。我的疑问是,为什么我们不能说它是(a)的显式专门化?因为我们可以为任何特定类型专门化模板。所以,当专门化int*时,为什么他们说(c)显式专门化(b)。 任何评论都将有助于理解事情。

  • 我有以下模板方法: 但是我得到了那些奇怪的链接错误: /usr/lib/gcc/x86_64-redhat-linux/4.4。7/../../../../包括/c/4.4。7/例外:62:void MyStruct::readField(std::basic_istream)的多重定义 如何专门化此成员函数? 编辑 这种方法在以下方面起作用: 或者使用s或在类外使用

  • 我想用两种模板类型编写一个模板化函数:一种是bool,另一种是typename,我想专门研究typename。 这就是我想要的,但只针对T的几种类型: 没有bool在那里,我可以做这样的事情: 我搞不懂这句话的语法,而专门化方面的微软文档只涉及单一类型的情况。

  • 我试图编写一个可变函数模板来计算的字节大小。这将用于一个网络编程项目,我正在工作。第一步,我在没有工作的variadic模板的情况下想出了这个: 错误代码#2。如果我将variadic模板放在不同的位置: 我得到了 错误:重载的'size t ()'调用不明确

  • 我有一段代码,它是做模板专门化的常用模式。为了移除main函数第一行中为Processor1指定DataType1的要求,我想改为接收一个template模板参数。看起来using指令不支持分配“open”模板参数,而且我在web中找不到任何这样的示例(可能我没有使用适当的关键字进行搜索...) 所以问题很“简单”,我如何让这段代码编译呢?在FindDefaultProcessor中,使用type