小编Rad*_*dek的帖子

C++ - 可变参数模板部分特化

让我们有一个简单的片段:

template<class T, class... Args>
struct A {
    void operator()() { std::cout << "A"; }
};

template<class T, class... Args>
struct A<T, double, Args...> {
    void operator()() { std::cout << "B"; }
};

template<class T, class B, class... Args>
struct A<T, B, double, Args...> {
    void operator()() { std::cout << "C"; }
};
Run Code Online (Sandbox Code Playgroud)

我可以这样使用:

int main() {
    A<int, int, int> a;
    A<int, double, int> b;
    A<int, int, double> c;
    a(); b(); c();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它正确返回"ABC"。但是当我声明时,A<int, double, …

specialization variadic-templates c++11

5
推荐指数
1
解决办法
2117
查看次数

可以是std :: function inlined或者我应该使用不同的方法吗?

我正在研究一个复杂的框架,它使用std::function<>许多函数作为参数.通过剖析我发现以下一个性能问题.

有人可以解释为什么Loop3a这么慢吗?我预计将使用内联,时间也是一样的.装配也一样.有没有办法改善表现或不同的方式?C++ 17是否以这种方式做出任何改变?

#include <iostream>
#include <functional>
#include <chrono>
#include <cmath>

static const unsigned N = 300;

struct Loop3a
{
    void impl()
    {
        sum = 0.0;
        for (unsigned i = 1; i <= N; ++i) {
            for (unsigned j = 1; j <= N; ++j) {
                for (unsigned k = 1; k <= N; ++k) {
                    sum +=  fn(i, j, k);
                }
            }
        }
    }

    std::function<double(double, double, double)> fn = [](double a, double b, double c) {
        const …
Run Code Online (Sandbox Code Playgroud)

c++ c++11 std-function c++14 c++17

2
推荐指数
2
解决办法
527
查看次数