禹果_个人页

个人头像照片 禹果
个人头像照片
0
6
0

个人介绍

暂无个人介绍

擅长的技术

获得更多能力
通用技术能力:

暂时未有相关通用技术能力~

云产品技术能力:

暂时未有相关云产品技术能力~

阿里云技能认证

详细说明
暂无更多信息

2020年03月

正在加载, 请稍后...
暂无更多信息
  • 提交了问题 2020-03-21

    C++ 多个模板中其中一个的模板特化

  • 回答了问题 2020-03-21

    C++ 多个模板中其中一个的模板特化

    首先,请参阅 为什么只能在头文件中实现模板(阿里云社区地址) 为什么只能在头文件中实现模板(stackoverflow地址) 现在,您的问题并非来自上述问题,但是,您仍应需要考虑是否要在cpp文件中实现模板。 我怀疑你没有。 无论如何,您要问的问题是您试图定义一个尚未模板特化的专门类模板的方法。 下面有两个选择。 - 您可以特化类模板,重复整个过程 template class MyComputationClass { numberType a = 1; numberType b = 2; numberType compute(); }; 您可以使用所有通用代码创建类模板,并派生类模板仅包含您需要特化的部分在C++ 17 中你可以使用 if constexpr : template numberType MyComputationClass::compute() { if constexpr (increateByOne) return a + b + 1; else return a + b; } 在C ++ 20中,您可以使用require子句: template class MyComputationClass { numberType a = 1; numberType b = 2; numberType compute() requires increaseByOne { return a + b + 1; }; numberType compute() requires (!increaseByOne) { return a + b; }; }; 回答来源:stackoverflow
    踩0 评论0
  • 回答了问题 2020-03-21

    C++ 为什么只能在头文件中实现模板

    警告:没有必要把在头文件中实现它,这个答案的末尾有替代解决方案。 无论如何,您的代码失败的原因是:在实例化模板时,编译器会使用给定的模板参数创建一个新类。例如: struct Foo { T bar; void doSomething(T param) {/* do stuff using T */} }; // somewhere in a .cpp Foo f; 阅读此行时,编译器将创建一个新类(我们称之为FooInt ),其等效于以下内容: { int bar; void doSomething(int param) {/* do stuff using int */} } 因此,编译器需要访问方法的实现,以使用模板参数(在本例中为int )实例化它们。 如果不在头文件中实现,则将无法访问它们,因此编译器将无法实例化模板。 常见的解决方案是将模板声明写入头文件中,然后在实现文件(例如.tpp)中实现该类,并在头末尾包含该实现文件。 Foo.h struct Foo { void doSomething(T param); }; #include 'Foo.tpp' Foo.tpp void Foo::doSomething(T param) { //implementation } 用这种方式,实现仍与声明分开,但编译器可以访问。 Alternative solution 另一个解决方案是使实现分离,并显式实例化您需要的所有模板实例: Foo.h template struct Foo { ... }; Foo.cpp // explicit instantiations template class Foo; template class Foo; // You will only be able to use Foo with int or float 如果我的解释不够清楚,您可以查看有关此主题的C ++ Super-FAQ。 回答来源:stackoverflow
    踩0 评论0
  • 提交了问题 2020-03-20

    C++ 为什么只能在头文件中实现模板

  • 提交了问题 2020-03-20

    C++ 不能在已经用作变量的对象中使用成员

  • 回答了问题 2020-03-20

    C++ 不能在已经用作变量的对象中使用成员

    我没有全部检查过,但是我之前遇到过此错误。 在attachA 中,创建一个临时对象并保存其地址。这样做是不行的,因为对象会在方法结束时被破坏。 因此,您有一个地址到达堆栈中的某个位置(因为堆栈局部变量)。 在另一个对象上调用该方法时,堆栈框架偶然(或多或少)是相同的,并且该对象位于同一位置。 因此,两个地址的末尾相同(并且附带无效)。 回答来源:stackoverflow
    踩0 评论0
正在加载, 请稍后...
滑动查看更多
正在加载, 请稍后...
暂无更多信息