template-specialization相关内容

';仅将成员函数添加到类的专用模板

我有一个模板类,我想向模板的特定专门化添加一个特殊函数。此函数仅对std::String模板有意义。 我展示了我目前是如何处理这个问题的…问题是删除的函数仍然对所有模板类型可见,而不仅仅是我想要使用它的匹配模板。 有没有更优雅的方式来处理这种困境? template class Match { /* *Class Definition ..
发布时间:2022-02-25 20:08:04 C/C++开发

模板专业化 VS 函数重载

一本教科书我注意到你可以通过模板特化或函数重载为标准库函数提供你自己的实现,比如 swap(x,y).这对于任何可以从赋值交换以外的东西中受益的类型都很有用,例如 STL 容器(我知道已经编写了交换). 我的问题如下: 什么更好:模板专业化为您提供专业化交换实现或函数重载提供准确的您希望在没有模板的情况下使用参数? 为什么更好?或者如果它们相等,为什么会这样? 解决方案 ..

C++ 模板特化,明确调用可以是指针或引用的类型的方法

总结 有没有一种方法可以在不知道是指针或引用的模板化类型上调用类方法,并且不会出现编译器/链接器错误? 详情 我有一个模板化的 QuadTree 实现,它可以采用以下任何非平凡的用户定义类型: //抽象基类a2de::形状//派生类a2de::点a2de::Linea2de::矩形a2de::圆a2de::椭圆a2de::三角形a2de::Arca2de::Splinea2de ..
发布时间:2022-01-05 12:01:19 C/C++开发

将 std::hash 专门化为派生类

我有一个抽象基类 Hashable,可以从它派生出可以散列的类.我现在想将 std::hash 扩展到所有从 Hashable 派生的类. 下面的代码应该就是这样做的. #include #include #include 类哈希{上市:虚拟 ~Hashable() {}虚拟 std::size_t Hash() const =0;};派生类:公共哈希{上市:std::size_t Has ..
发布时间:2021-12-27 16:44:27 其他开发

理解(简单?)C++ 部分模板专业化

注意:这似乎是一个问题的转贴:C++ - 重载模板化的类方法,部分特化该方法 我已经将我在 C++ 模板专业化中遇到的问题归结为一个简单的案例. 它由一个简单的 2 参数模板类 Thing 组成,我想在其中专门化 Thing::doSomething() 用于 B=int. #include //一个 3 参数模板类.模板类事物{上市:事物(A a,B b): ..
发布时间:2021-12-13 19:21:15 C/C++开发

删除“通用"的专用模板函数案例无法使用 g++ <=4.8.0 和 clang++ 编译

用旧版本的g++(4.8.0,MinGW)编译项目我发现这段代码编译失败: templatevoid foo() = 删除;模板void foo(){}int main() {foo();返回0;} 如果 g++ 看到基本情况被删除,它似乎甚至不会尝试寻找显式特化. mitalia@mitalia:~/scratch$/opt/mingw32-dw2/bin/i686-w64-mingw ..

如何知道类型是否是 std::vector 的特化?

我整个上午都在解决这个问题,但没有任何结果.基本上,我需要一个简单的元编程东西,如果传递的参数是一种 std::vector 或不是,它允许我分支到不同的专业化. 某种用于模板的is_base_of. 这种东西存在吗? 解决方案 在 C++11 中,您也可以采用更通用的方式: #include #include #include #include 模板类参考>struct i ..
发布时间:2021-12-13 18:55:50 C/C++开发

C++ 函数模板偏特化?

我知道下面的代码是一个类的部分特化: template 类我的类{…};//部分特化:两个模板参数具有相同的类型模板 class MyClass{…}; 我也知道 C++ 不允许函数模板部分特化(只允许完整).但是我的代码是否意味着我已经部分地为一个/相同类型的参数专门化了我的函数模板?因为它适用于 Microsoft Visual Studio 2010 Express!如果不是,那么您能否 ..

类模板:为什么我不能为 void 类型专门指定一个方法?

我有一个类模板: template 类信号{无效调用(参数 arg){}}; 现在我想调用没有参数的信号(意思是 void 参数).我假设我可以将整个类专门化为 void 并且它会编译.但是课上代码很多,不想重复.我只想专注于任何必要的事情.所以我尝试添加: //void 特化模板void Signal::invoke(){} 并得到一个错误: 错误 C2244:'Signal: ..
发布时间:2021-09-05 18:31:15 C/C++开发

模板 ID 不匹配任何模板声明

我遇到了一个令人沮丧的编译器错误,我似乎无法解决.这与模板专业化有关,但我看不出有什么问题... ../../include/thread/lock_guard.inl:23: 错误:模板 ID 'lock_guard'对于 'thread::lock_guard::lock_guard(thread::null_mutex&)' 不匹配任何模板声明. ..
发布时间:2021-09-05 18:31:09 C/C++开发

完全专业化模板中构造函数的外联定义

我真的很惭愧提出这个问题,但看起来我毕竟对模板一无所知. 所以我有这个片段: template 类 foo;班级酒吧;模板 类 foo {民众:富();};模板 foo :: foo(){} 哪里,好吧,我只有一个模板类 foo、一个类 bar、一个带有构造函数的特殊化 foo ,我想定义该构造函数. 尽管这个例子看起来很琐碎,但我无法编译它,而且我总是得到 没有函数模板匹 ..
发布时间:2021-09-05 18:31:03 C/C++开发

使用另一个模板类的嵌套名称说明符专门化一个模板类

我想使用另一个模板类的嵌套名称说明符专门化一个模板类.但是编译器抱怨它无法推导出这段代码.我该怎么办? template struct convert{//这是外部库中的一个类//这个库的指南告诉我要专攻//将某些功能转换为我自己的类.void foo(T&t) {/* 做某事 */}};模板 结构体{struct A_sub{//我的类};};模板 struct convert::A_sub> ..
发布时间:2021-09-05 18:31:00 C/C++开发

C++ 中的显式专业化

我正在阅读 Primer C++ > Adventures in Functions > Templates > Explicit Specialization. 为了说明显式专业化的原因/用途,举例说明.考虑一个可以交换任何类型(int、double、struct 等)的交换模板函数(我认为代码一目了然所以不用写在这里) 但是有一个特定的结构(称为作业),您只想交换其中的两个成员,而 ..
发布时间:2021-09-05 18:30:57 C/C++开发