模板专业化:非内联函数定义问题

2023-12-28

以下代码可以正确编译。

#include <string>

template <typename T, typename U>
class Container
{
private:
    T value1;
    U value2;
public:
    Container(){}
    void doSomething(T val1, U val2);
};

template<typename T, typename U>
void Container<typename T, typename U>::doSomething(T val1, U val2)
{
    ; // Some implementation
}

template <>
class Container<char, std::string>
{
private:
    char value1;
    std::string value2;
public:
    Container(){}
    void doSomething(char val1, std::string val2)
    {
        ; // Some other implementation
    }
};

但如果我尝试定义void doSomething(char val1, std::string val2)在外面,我收到以下错误。

#include <string>

template <typename T, typename U>
class Container
{
private:
    T value1;
    U value2;
public:
    Container(){}
    void doSomething(T val1, U val2);
};

template<typename T, typename U>
void Container<typename T, typename U>::doSomething(T val1, U val2)
{
    ; // Some implementation
}

template <>
class Container<char, std::string>
{
private:
    char value1;
    std::string value2;
public:
    Container(){}
    void doSomething(char val1, std::string val2);
};

template<>
void Container<char,std::string>::doSomething(char val1, std::string val2)
{
    ; // Some other implementation
}

Error:

错误 1 ​​错误 C2910: '容器::doSomething' : 不能明确 专门的 c:\users\bharani\documents\visual 工作室 2005\项目\模板\模板 专业化\templatespecializationtest.cpp 35

我犯了什么错误?

Thanks.


您没有明确专门化成员函数。但是您正在定义显式(类模板)专业化的成员函数。这是不同的,你需要像这样定义它

inline void Container<char,std::string>::doSomething(char val1, std::string val2)
{
    ; // Some other implementation
}

请注意,“内联”很重要,因为这不是模板,并且如果它是在类外部定义的,则它不是隐式内联的。如果将标头包含到多个翻译单元中,则需要内联以避免重复的链接器符号。

如果您的显式专业化中有一个模板,则必须使用您的语法:

template <>
class Container<char, std::string>
{
private:
    char value1;
    std::string value2;
public:
    Container(){}

    template<typename T, typename U>
    void doSomething(T val1, U val2) { /* primary definition */ }
};

template<>
inline void Container<char,std::string>::doSomething(char val1, std::string val2)
{
    ; // Some other implementation
}

您的第一个代码中也有错误。您需要像这样定义类外定义,类模板的参数列表中没有“typename”

template<typename T, typename U>
void Container<T, U>::doSomething(T val1, U val2) 
{
    ; // Some implementation
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模板专业化:非内联函数定义问题 的相关文章

  • 以相反的顺序迭代可变参数模板参数

    如果我手动反转传递给它的模板参数的顺序 以下代码将起作用 template
  • 扫描文本文件时如何跳过行?

    我想扫描一个文件并在阅读之前跳过一行文本 我试过 fscanf pointer n struct test i j 但这个语法只是从第一行开始 我可以使用 scanf 使用以下指令跳过行 fscanf config file n n 格式字
  • 没有 Unicode 字节顺序标记。无法切换到 Unicode

    我正在使用 XSD 编写 XML 验证器 下面是我所做的 但是当验证器到达该线时while list Read 它给了我错误 没有 Unicode 字节顺序标记 无法切换到 Unicode 有人可以帮我解决吗 public class Va
  • 通过引用传递时取消引用指针

    当通过引用传递给函数时取消引用指针时会发生什么 这是一个简单的例子 int returnSame int example return example int main int inum 3 int pinum inum std cout
  • 将 C# 反射代码移植到 Metro-Ui

    我正在尝试移植使用反射的现有 C 类 通用工厂 但我无法编译这段代码 Type types Assembly GetAssembly typeof TProduct GetTypes foreach Type type in types i
  • 特定设备的不同字体大小

    我目前正在开发通用应用程序 我需要分别处理移动设备和桌面的文本框字体大小 我找到了一些方法 但都不能解决问题 使用 VisualStateManager 和 StateTrigger 为例
  • 抽象类或接口。哪种方式是正确的?

    有两种方法可以选择抽象类或接口 微软解决方案和Oracle解决方案 微软 设计指南 请使用抽象 在 Visual Basic 中为 MustInherit 类而不是接口来将协定与实现分离 http msdn microsoft com en
  • Microsoft.Graph - 如何从具有不同用户名的共享邮箱发送?

    我目前正在将使用 SMTP 的服务代码移植到 Office 365 通过 SMTP 我可以使用 发件人 字段在来自共享收件箱的邮件上设置不同的用户名 同时保留共享电子邮箱地址 这似乎无法通过 Office 365 运行 其工艺流程为 客户填
  • 线程安全的 C++ 堆栈

    我是 C 新手 正在编写一个多线程应用程序 不同的编写者将对象推入堆栈 读者将它们从堆栈中拉出 或至少将指针推入对象 C 中是否有任何内置结构可以在不添加锁定代码等的情况下处理此问题 如果没有 那么 Boost 库呢 EDIT 你好 感谢您
  • 更改其他页面的主窗口内容

    在 WPF 应用程序的主窗口中 我有一个 Badged 元素 来自材料设计 这是我的代码
  • realloc():重新分配为 char * 上的 strcat 腾出空间时下一个大小无效 [重复]

    这个问题在这里已经有答案了 我在以下代码中收到无效内存错误 printf s n FINE 5 printf s LENGTH IS d n FINE 6 strlen buffer char realloc buffer strlen b
  • 无法通过 LINQ to Entities 使用某些功能?

    我正在尝试使用 LINQ 查询在项目上实现搜索功能 由于数据有时包含带有重音符号和其他符号的字符 因此我创建了一种方法来删除这些字符以进行搜索 这是我的代码 var addresses from a in db Addresses join
  • 理解 C++11 中的 std::atomic::compare_exchange_weak()

    bool compare exchange weak T expected T val compare exchange weak 是 C 11 中提供的比较交换原语之一 它是weak即使对象的值等于 它也会返回 falseexpected
  • C++ 标准中短语“构造函数没有名称”的含义

    在尝试理解 C 标准中的 构造函数没有名称 这句话时 我似乎在 clang 中发现了一个错误 有人可以证实这一点吗 VS2015 and gcc rejects this code and I think they it are is co
  • 展开路径中具有环境变量的文件名

    最好的扩张方式是什么 MyPath filename txt to home user filename txt or MyPath filename txt to c Documents and settings user filenam
  • 你能解释一下这个C++删除问题吗?

    我有以下代码 std string F WideString ws GetMyWideString std string ret StringUtils ConvertWideStringToUTF8 ws ret return ret W
  • 为什么C语言中可以使用多个分号?

    在 C 中我可以执行以下操作 int main printf HELLO WORLD 它有效 这是为什么 我个人的想法 分号是一个 NO OPERATION 来自维基百科 指示符 拥有一大串分号与拥有一个分号并告诉 C 语句已结束具有相同的
  • 在 SQL Server 上执行分页的最佳方式是什么?

    我有一个数据库超过200万记录 我需要执行分页以在我的 Web 应用程序上显示 该应用程序每页必须有 10 条记录DataGrid 我已经尝试使用ROW NUMBER 但是这种方式会选择所有 200 万条记录 然后只得到 10 条记录 我也
  • 如何强制执行特定的 UserControl 设计

    我正在编写一个基本用户控件 它将由一堆其他用户控件继承 我需要对所有这些后代控件强制执行某种设计 例如 顶部必须有几个按钮以及一个或两个标签 后代用户控件区域的其余部分可以自由放置任何内容 最初 我认为我可以将一个面板放到 Base Use
  • 如何使用 ASP.NET Web 表单从代码隐藏中访问更新面板内的文本框、标签

    我在更新面板中定义了一些控件 它们绑定到中继器控件 我需要根据匿名字段隐藏和显示用户名和国家 地区 但问题是我无法以编程方式访问更新面板中定义的控件 我如何访问这些控件 我也在网上查找但找不到很多参考资料 下面是来自aspx页面和 cs页面

随机推荐

  • 无法安装适用于 AMD 处理器的 Android 仿真器管理程序驱动程序(安装程序)

    如上所述通过 GUI 禁用 HyperV Disable WindowsOptionalFeature Online FeatureName Microsoft Hyper V 然后通过上面的 powershell 进行确认 然而 当运行
  • 使用 scipy/numpy 在 Python 中解析字母数字 CSV 的最终方法

    我一直在尝试找到一种良好且灵活的方法来在 Python 中解析 CSV 文件 但似乎没有一个标准选项符合要求 我很想自己写一个 但我认为 numpy scipy 和 csv 模块中存在的某种组合可以满足我的需要 所以我不想重新发明轮子 我想
  • 在 .js 文件中包含 .js 文件 [重复]

    这个问题在这里已经有答案了 我想知道是否可以包括 js文件在另一个文件中 js file 我想要这样做的原因是为了将客户端包含的内容保持在最低限度 我有一些 js已经编写了客户端所需功能的文件 客户将有一个 html 文件 他 她用 js文
  • 如何获取路径相关类型的类标签

    我有一个抽象的路径相关类型 我需要对其进行 ClassTag 有没有比手动提取每个具体派生类的隐式更好的方法 trait Foo type A ClassTag Need the ClassTag of A later val ctA Cl
  • 使用 C++ 中的 scanLine() 方法存储 QImage 的所有像素

    我正在尝试使用修改图像Qt与scanLine http doc qt io qt 4 8 qimage html scanLine方法 此方法返回指向给定行数据的指针 我创立了如何读取行here https stackoverflow co
  • 动态更改日志文件的文件路径.NET Core + NLog

    在我的 NET Core 应用程序中 我使用一些环境 并且我想为每个环境使用不同的路径来记录文件 例如 Development c logs Staging d apps logs 对于每个环境我都有配置部分appsettings env
  • Windows 7:超出 C++ std::this_thread::sleep_for

    我们的代码是用 C 11 VS2012 Win 7 64bit 编写的 C 库提供了sleep for我们使用的函数 我们观察到 C sleep for有时会出现较大的超调 换句话说 我们请求睡眠 15 毫秒 但睡眠结果是例如 15 毫秒
  • YouTube API:如何获取 liveChatId?

    文档说 liveChatId 参数指定将返回其消息的聊天 ID 与广播关联的实时聊天 ID 在 liveBroadcast 资源的 snippet liveChatId 属性中返回 但是 当使用 API Explorer 和 youtube
  • 从特定列 scala Spark 数据帧获取最小值和最大值

    我想从我的数据框中访问特定列的最小值和最大值 但我没有列的标题 只有它的编号 所以我应该使用 scala 吗 也许是这样的 val q nextInt ncol we pick a random value for a column num
  • Javascript:如何正确扩展类

    在互联网上搜索时 我总是遇到这种 Javascript 类扩展方法 function extend Child Parent var F function F prototype Parent prototype Child prototy
  • ILNumerics 在特定位置绘制平面

    我目前正在使用 ILNumerics API 并开始在立方体中绘制几个点 然后我通过这些点计算了一个回归平面 现在我想在相同的场景图中绘制平面 但大小仅与点云相同 我得到了平面的参数 a b c f x y a x b y c 我知道只有
  • 媒体播放器响应第二次点击暂停

    使用ViewPager进行图像滑动 每个图像onclick流不同的MP3 应用程序包括 50 个页面 图像 和 50 个不同的 mp3 所有 mp3 都存储在应用程序本身上 前任 第一页流 MP3 one 第二页流 MP3 two 依此类推
  • IE 打印时 iframe 在底部剪切

    在 IE11 上打印下面的页面时 会剪切底部的 iframe 而不是让它扩展到下一页 我怎样才能防止这种情况并让它打印所有内容 注意 要重现此问题 只需将以下代码粘贴到记事本中并在 IE 中打开即可 div a href h1 Print
  • quill可以限制上传图片的大小吗?

    由于图片较大 响应较慢 所以一定要限制 怎么做 谢谢 var editor new Quill postContent modules toolbar toolbar container theme snow placeholder 不超过
  • 实体框架从 SQL Server 视图返回损坏/交换数据

    我从 SQL Server 中的视图进行简单查询 SELECT PricePerM FROM RealtyStatParent ORDER BY PricePerM 当我在 SQL Management Studio 中执行查询时 我得到了
  • 如何在 docker 中创建和运行 .net Core 控制台应用程序

    我有一个 NET Core 2 1 控制台应用程序 我想在 Docker 映像中运行此控制台应用程序 我是 Docker 新手 只是想弄清楚它 这时候我就有了一个Dockerfile 其灵感来自微软的例子 https learn micro
  • 查找作为 c 中函数的参数接收的整数数组的大小[重复]

    这个问题在这里已经有答案了 我想找到作为参数传递给函数的整数数组的大小 这是我的代码 void getArraySize int arr int len sizeof arr sizeof arr 0 printf Array Length
  • 代号一中的文本屏幕,如何读取文本文件?

    我想向我的 Codename One 应用程序添加帮助屏幕 由于文本比其他字符串更长 我想将其放在单独的文件中并将其添加到应用程序包中 我该怎么做呢 我应该将文本文件放在哪里 以及如何轻松地将其一次性读取到字符串中 我已经知道如何将字符串放
  • 为什么我们要包含 stdlib.h?

    C功能malloc 定义如下stdlib h 如果我们不包含这个文件 它应该会给出一个错误 但是这个代码可以正常工作 但有一点警告 我的问题是 如果malloc 没有这个头文件也可以工作 那么为什么我们需要包含它呢 请帮助澄清我的概念 in
  • 模板专业化:非内联函数定义问题

    以下代码可以正确编译 include