template-specialization相关内容
适用于类的语法不适用于概念: template concept C = requires(Type t) { // ... }; template concept C = requires(Type t) { // ... }; MSVC表示适用于error C7606: 'C': concept ca
..
我有一个模板类,我想向模板的特定专门化添加一个特殊函数。此函数仅对std::String模板有意义。 我展示了我目前是如何处理这个问题的…问题是删除的函数仍然对所有模板类型可见,而不仅仅是我想要使用它的匹配模板。 有没有更优雅的方式来处理这种困境? template class Match { /* *Class Definition
..
请看我要做什么: #include 命名空间优先{模板我的班级{吨;上市:无效 who_are_you() 常量{ std::cout 类 myclass {整数 i, j;上市:无效 who_are_you() 常量{ std::cout
..
考虑以下程序: #include #include #include #include 使用命名空间标准;//为方便起见,仅作说明typedef pair观点;//这是我对pair的专长.我称之为点istream&运营商 >>(istream & in, point & p){返回 >>p.first >>p.second;}int main(){矢量v((istream_iterator
..
一本教科书我注意到你可以通过模板特化或函数重载为标准库函数提供你自己的实现,比如 swap(x,y).这对于任何可以从赋值交换以外的东西中受益的类型都很有用,例如 STL 容器(我知道已经编写了交换). 我的问题如下: 什么更好:模板专业化为您提供专业化交换实现或函数重载提供准确的您希望在没有模板的情况下使用参数? 为什么更好?或者如果它们相等,为什么会这样? 解决方案
..
总结 有没有一种方法可以在不知道是指针或引用的模板化类型上调用类方法,并且不会出现编译器/链接器错误? 详情 我有一个模板化的 QuadTree 实现,它可以采用以下任何非平凡的用户定义类型: //抽象基类a2de::形状//派生类a2de::点a2de::Linea2de::矩形a2de::圆a2de::椭圆a2de::三角形a2de::Arca2de::Splinea2de
..
我有一个抽象基类 Hashable,可以从它派生出可以散列的类.我现在想将 std::hash 扩展到所有从 Hashable 派生的类. 下面的代码应该就是这样做的. #include #include #include 类哈希{上市:虚拟 ~Hashable() {}虚拟 std::size_t Hash() const =0;};派生类:公共哈希{上市:std::size_t Has
..
假设我已经声明: template void foo(T& t); 现在, 和有什么区别 模板 void foo(int&t); 和 template void foo(int&t); 语义上?不带括号的模板和带空括号的模板在其他上下文中是否有其他语义? 相关:如何强制实例化 C++ 模板的特定实例? 解决方案 template void foo(in
..
注意:这似乎是一个问题的转贴:C++ - 重载模板化的类方法,部分特化该方法 我已经将我在 C++ 模板专业化中遇到的问题归结为一个简单的案例. 它由一个简单的 2 参数模板类 Thing 组成,我想在其中专门化 Thing::doSomething() 用于 B=int. #include //一个 3 参数模板类.模板类事物{上市:事物(A a,B b):
..
用旧版本的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 或不是,它允许我分支到不同的专业化. 某种用于模板的is_base_of. 这种东西存在吗? 解决方案 在 C++11 中,您也可以采用更通用的方式: #include #include #include #include 模板类参考>struct i
..
我知道下面的代码是一个类的部分特化: template 类我的类{…};//部分特化:两个模板参数具有相同的类型模板 class MyClass{…}; 我也知道 C++ 不允许函数模板部分特化(只允许完整).但是我的代码是否意味着我已经部分地为一个/相同类型的参数专门化了我的函数模板?因为它适用于 Microsoft Visual Studio 2010 Express!如果不是,那么您能否
..
我想要一个可以接受许多不同事物(为简单起见)的函数,如下所示: template typename type_to_return::type//
..
我有一个类模板: template 类信号{无效调用(参数 arg){}}; 现在我想调用没有参数的信号(意思是 void 参数).我假设我可以将整个类专门化为 void 并且它会编译.但是课上代码很多,不想重复.我只想专注于任何必要的事情.所以我尝试添加: //void 特化模板void Signal::invoke(){} 并得到一个错误: 错误 C2244:'Signal:
..
在 C++11 中,如何特化使用 decltype 声明为“复杂"尾随返回类型的函数模板?以下在 GCC 中有效,但在 VC2013 中产生“错误 C2912:显式特化‘int f(void)’不是函数模板的特化": #include int myint() { 返回 1;}模板自动 f() ->decltype(myint())//这似乎会导致问题{std::cout
..
我遇到了一个令人沮丧的编译器错误,我似乎无法解决.这与模板专业化有关,但我看不出有什么问题... ../../include/thread/lock_guard.inl:23: 错误:模板 ID 'lock_guard'对于 'thread::lock_guard::lock_guard(thread::null_mutex&)' 不匹配任何模板声明.
..
我想我会先展示这个例子然后再解释它: #include 模板结构参数{使用 T = T_;静态 constexpr size_t size = size_;};模板结构体{模板std::array&getArray()//应生成 Arguments 中所有 args 的特化{静态 std::array啊;返回 arr;}};int main(){Foo, arg, arg我的福;myFoo.ge
..
我真的很惭愧提出这个问题,但看起来我毕竟对模板一无所知. 所以我有这个片段: template 类 foo;班级酒吧;模板 类 foo {民众:富();};模板 foo :: foo(){} 哪里,好吧,我只有一个模板类 foo、一个类 bar、一个带有构造函数的特殊化 foo ,我想定义该构造函数. 尽管这个例子看起来很琐碎,但我无法编译它,而且我总是得到 没有函数模板匹
..
我想使用另一个模板类的嵌套名称说明符专门化一个模板类.但是编译器抱怨它无法推导出这段代码.我该怎么办? template struct convert{//这是外部库中的一个类//这个库的指南告诉我要专攻//将某些功能转换为我自己的类.void foo(T&t) {/* 做某事 */}};模板 结构体{struct A_sub{//我的类};};模板 struct convert::A_sub>
..
我正在阅读 Primer C++ > Adventures in Functions > Templates > Explicit Specialization. 为了说明显式专业化的原因/用途,举例说明.考虑一个可以交换任何类型(int、double、struct 等)的交换模板函数(我认为代码一目了然所以不用写在这里) 但是有一个特定的结构(称为作业),您只想交换其中的两个成员,而
..