- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何优先(告诉编译器)使用“函数接收引用”(#B)而不是“函数接收值”(#A)?
#include <iostream>
using namespace std;
class Heavy{/* ...... */}; //a complex class
Heavy generateHeavy(){
return Heavy();
}
void f(Heavy x){ //#A I want LOW priority.
std::cout<<"case 1: pass by value"<<std::endl;
}
void f(Heavy& x){ //#B I want HIGH priority. (save CPU for big object)
std::cout<<"case 2: pass by reference"<<std::endl;
}
int main() {
//vvvv Here is existing code base that I don't want to touch.
f(generateHeavy()); //compiler call case 1 -> ok (I prefer reference, though)
Heavy heavy;
f(heavy); //should call case 2, but compiler fail (ambiguous) <= question
return 0;
}
这个问题来 self 第一次尝试将 SFINAE 扩展到一个更喜欢通过引用传递的真实案例,如果可能的话。
最佳答案
按字面意思去做的方法是
template <typename T = void>
std::enable_if_t<std::is_same<T, void>::value> f(Heavy x) { ... }
void f(Heavy& x) { ... }
第一个是函数模板,但只允许T = void
。第二个不是。在其他条件相同的情况下,非模板优先于模板。
现在,在实际代码中,您可能不会这样做。您将查看您希望支持哪些调用,并找到适合这些调用的更合适的方法。 @StoryTeller 建议 &&
:
void f(Heavy &&) { ... }
void f(Heavy &) { ... }
这意味着当你有一个右值时,比如你的函数结果,Heavy &&
重载将被调用。这通常没问题,但请注意,它与您要求的并不完全相同:
const Heavy c;
f(c);
您要求的是调用 f(Heavy)
。相反,使用 Heavy &&
重载时,没有接受它的重载。
额外的重载 void f(const Heavy &)
可以解决这个问题。问题中没有足够的信息来判断这是否适合您的用例,但您应该能够自己弄清楚这一点。
关于c++ - 模棱两可 : Prioritize overloading of f(A&) over f(A),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41414312/
minmax: If max 50%那么我们将至少有50% (我们的最小边界)并且我们不会超过 70vmin 如果70vmin 在上面的示例中,我们将宽度固定为 50%,因此从技术上讲它不会更大。
如何优先(告诉编译器)使用“函数接收引用”(#B)而不是“函数接收值”(#A)? #include using namespace std; class Heavy{/* ...... */}; /
问题:当搜索与搜索查询相似的词多次出现的文本时,它们比具有一次完全匹配的文本获得更高的排名。 示例:假设搜索查询是“生产力”,那么“有机产品的生产”的排名高于“劳动力” productivity” 只
在 Google 页面速度中,我收到一条关于“优先显示内容”的评论,这似乎是最近对页面速度算法的更改。为了尝试理解这个问题,我在 HTML 中创建了一个只有一张图片的简单页面(在我的域下),我仍然看到
我正在编写 PHP 代码并使用一些非常有用的扩展: PHP Formatter仅用于格式化代码 PHP Intelephense用于提供智能感知 在这种情况下,它们都是格式化提供程序,因此您可以右键单
我想知道是否有一种微妙的方法可以以某种方式对事件监听器进行优先级排序,即更改它们的调用顺序,而不更改它们的添加顺序。片段: var listener1 = function () {
我正在开发使用 celery 执行后台任务的 django 应用程序。这些任务解析用户上传,进行一些 api 调用,然后将结果写入 postgres 数据库。 Celery 有 20 名 worker
现在我正在使用 Gevent,我想问两个问题: 有没有办法执行特定的任务,这将 从不异步执行 (而不是在每个任务中使用锁) 有没有办法到优先在 Gevent 中生成任务?就像一组将以低优先级生成的任务
有没有办法让 Window 的任务调度程序知道我的工作线程没有主线程那么紧急,以便它可以选择先中断它们?我遇到了一些麻烦,因为我的主线程经常被抢占,这减慢了它向其他线程委派任务的能力。 最佳答案 看看
我目前正在创建一个由来自 mysql 查询的值组成的排序方法。 下面是数组的简要 View : Array ( [0] => Array (
我是一名优秀的程序员,十分优秀!