具有多个模板参数错误的模板部分特化

2023-12-15

当我在具有一个模板参数的类上使用模板部分特化时,我可以特化这样的方法:

#include <cstdlib>

template< std::size_t Dim >
class Test
{
public:
  int foo();
};

template< std::size_t Dim >
inline int Test< Dim >::foo()
{
  return 0;
}

template<>
inline int Test< 1 >::foo()
{
  return 1;
}

int main()
{
  Test< 2 > wTest2;
  Test< 1 > wTest1;
  wTest2.foo();
  wTest1.foo();
  return 0;
}

方法 foo 专门用于 Dim = 1。但是一旦我向我的类添加模板参数,如下所示:

#include <cstdlib>

template< typename T, std::size_t Dim >
class Test
{
public:
  int foo();
};

template< typename T, std::size_t Dim >
inline int Test< T, Dim >::foo()
{
  return 0;
}

template< typename T >
inline int Test< T, 1 >::foo()
{
  return 1;
}

int main()
{
  Test< double, 2 > wTest2;
  Test< double, 1 > wTest1;
  wTest2.foo();
  wTest1.foo();
  return 0;
}

(VS2010 的)编译器抱怨这些错误:

1>c:\documents and settings\cayouette\my documents\codelocal\testtemplatespecialization\main.cpp(20): error C3860: template argument list following class template name must list parameters in the order used in template parameter list
1>c:\documents and settings\cayouette\my documents\codelocal\testtemplatespecialization\main.cpp(20): error C2995: 'int Test<T,Dim>::foo(void)' : function template has already been defined
1>          c:\documents and settings\cayouette\my documents\codelocal\testtemplatespecialization\main.cpp(7) : see declaration of 'Test<T,Dim>::foo'
1>c:\documents and settings\cayouette\my documents\codelocal\testtemplatespecialization\main.cpp(20): error C2976: 'Test<T,Dim>' : too few template arguments
1>c:\documents and settings\cayouette\my documents\codelocal\testtemplatespecialization\main.cpp(26): error C2264: 'Test<T,Dim>::foo' : error in function definition or declaration; function not called
1>          with
1>          [
1>              T=double,
1>              Dim=2
1>          ]
1>c:\documents and settings\cayouette\my documents\codelocal\testtemplatespecialization\main.cpp(27): error C2264: 'Test<T,Dim>::foo' : error in function definition or declaration; function not called
1>          with
1>          [
1>              T=double,
1>              Dim=1
1>          ]
1>
1>Build FAILED.

在我看来,没有任何歧义,编译器应该能够解决所有问题并像单参数情况一样工作。

如果 C++ 不支持此功能,请解释原因。


You cannot partially specialise functions – this includes member functions. You can only partially specialise the whole class:

template< typename T, std::size_t Dim >
class Test
{
public:
  int foo()
  {
    return 0;
  }
};

template< typename T >
class test< T, 1 >
{
public:
  int foo()
  {
    return 1;
  }
};

(我在这里内联定义了函数;当然这不是必需的。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有多个模板参数错误的模板部分特化 的相关文章

随机推荐

  • Horizo​​ntalScrollView 和适配器

    我可以将一些适配器类与 Horizo ntalScrollView 类一起使用 就像将其与 ListView 一起使用一样吗 如果你正在寻找水平列表视图 github上有很多其他人完成的项目 你可以看看它们 DevsmartLib Andr
  • 无法访问 Firebase 对象属性。值显示为未定义 ANGULARFIRE

    我想为我所做的演示进行自定义登录 但遇到了问题 我使用用户名访问 Firebase 内的引用 url 得到一个返回的对象 如果我想访问单个属性 我会得到未定义的值 但是如果我在 html 中添加 returnedObj name 显示该值
  • Opera:无法从 window.open() 获取加载事件

    var openedWindow window open test html title openedWindow addEventListener load function console log received load event
  • Gson使用TypeAdapter或Json Deserializer将数据从错误列表转换为空列表

    让我们从例子开始 如果数据正确的话应该是 Beijing cities是空的 code 200 msg success data id 1 name Beijing cities id 2 name Guangdong cities id
  • 组织小型公用事业功能

    经过多年的编程 我们都有一组用作辅助实用程序的小函数 我们希望它是内置的 这样我们就可以在任何项目中使用它 并让更多的人照顾 测试和优化 我有相当多的这些功能的集合 我想知道你们是如何组织它们的 你有什么建议吗 我就是这样做的 我把它放在一
  • Backbone.js fetch() JSON 到模型 get() 返回未定义

    基本上我想获取一个JSON文件并将其存储在模型中 但是 当我尝试通过访问属性时get 它返回未定义 假设 JSON 文件有一个游戏数组 其中包含具有某些属性的对象 这并不重要 只是想将它们保存在模型中并访问它们 所以我正在做这样的事情 va
  • 使用 NULL 时的查询性能

    我想知道 NULL 值如何影响 SQL Server 2005 中的查询性能 我有一个与此类似的表 简化 ID ImportantData QuickPickOrder 1 Some Text NULL 2 Other Text 3 3 a
  • NHibernate 惰性属性行为?

    我一直在尝试让 NHibernate 参与我在工作场所进行的一个项目的开发 由于我必须非常重视性能 因此我一直在对包含数千条记录的现有项目表运行概念验证压力测试 所有这些记录都包含一个大型文本列 然而 当选择这些记录的集合时 select语
  • 在 DP Java 中以编程方式设置 ImageView 大小 [重复]

    这个问题在这里已经有答案了 我想设置一个的宽度和高度ImageView in Android The ImageView不存在于XML 它是在这里创建的 public void setImageView int i Integer d Li
  • 如何更改 JOptionPane 内的按钮背景

    我想知道是否有人知道是否可以更改按钮内的背景颜色JOptionPane 我知道如何改变整个JOptionPane背景使用UIManager 但知道我想要的是在JOptionPane分离各个颜色 如果我能做到这一点 我会怎么做 谢谢您的帮助
  • 文件中的 JetBrains PhpStorm 红色不会消失

    我有一些红色的文件 它们绝对没有错误 所有内容都正确编译 网络也正确显示 控制台上有 0 个错误 我实际上是复制粘贴 Angular 教程 它肯定是 100 无错误 但文件仍然是红色的 我很生气 因为它看起来像一个错误 有人有解决这个问题的
  • 使用pyaudio进行录音

    我正在尝试使用 python 录制语音 我尝试使用 pyaudio 模块 它在我的计算机上保存了一个 wav 文件 但录制了静态声音 有什么建议么 import pyaudio import wave CHUNK 1024 FORMAT p
  • 将 Unicode 字符串转换为转义 ASCII 字符串

    我怎样才能转换这个字符串 This string contains the Unicode character Pi 转换成转义的 ASCII 字符串 This string contains the Unicode character P
  • Yii2:验证是否至少选择了一个复选框

    我有多个音乐版本供用户创建促销 在促销创建表单上 我们列出了所有版本 我正在使用表单模型来创建促销 其中我为我的几个输入定义了所有规则促销形式模型 我想检查用户在保存表单时是否至少选择了一个版本 但它不起作用 因为复选框是动态创建的 我该字
  • 是否可以使用边框半径实现弯曲的圆形形状?

    我不确定形状是什么 我假设它是一个弯曲的圆圈 下面是示例的屏幕截图 我希望图像的形状有点像这样 但尝试与边界半径根本不工作 有什么方法可以用CSS实现这个形状吗 这是你的答案 你可以通过 border radius 来实现 如果您想自定义它
  • Laravel 5 多语言站点,url 中带有语言前缀

    因此 我需要在具有如下网址的网站上使用多种语言 mysite en language mysite it language mysite es language 我决定在我的路线中使用前缀 如下所示 allLanguages en it e
  • colgroup 和 col 上的 Span 属性

    这些代码在逻辑上是等价的吗
  • Laravel Route 在 web.php 中存在路由顺序问题

    我在 Laravel 中遇到路由问题 我正在遵循一个教程 并且我们在 web php 文件中列出了此路由 Route get home HomeController index gt name home Route get blog Blo
  • ColdFusion 9.0.0 TLSv1.2

    我正在运行 ColdFusion 9 0 Hotfix 3 我正在尝试让 TLSv1 2 适用于 cf http 标记 我首先升级到 Java 7 Update 80 然后升级到 Java 8 Update 25 使用 Wireshark
  • 具有多个模板参数错误的模板部分特化

    当我在具有一个模板参数的类上使用模板部分特化时 我可以特化这样的方法 include