#include <iostream>
#include <functional>
#include <benchmark/benchmark.h>
class Calculator {
public:
virtual int calculate(int x, int y) = 0;
};
class Minus : public Calculator {
public:
virtual int calculate(int x, int y) override {
return x + y;
}
};
class Plus : public Calculator {
public:
virtual int calculate(int x, int y) override {
return x - y;
}
};
class CalculatorClient {
public:
CalculatorClient(Calculator *p) : client_(p) {
}
public:
int calculate(int x, int y) {
return client_->calculate(x, y);
}
private:
Calculator *client_ = nullptr;
};
class BindCalculatorClient {
public:
BindCalculatorClient(std::function<int(int, int)>&&func) : func_(std::move(func)) {
}
public:
int calculate(int x, int y) {
return func_(x, y);
}
private:
std::function<int(int, int)>func_;
};
static void BM_TestVirtualFunction(benchmark::State &state) {
Minus minus;
CalculatorClient client0(&minus);
Plus plus;
CalculatorClient client1(&plus);
for (auto _ : state) {
client0.calculate(1, 2);
client1.calculate(1, 2);
}
}
static void BM_TestBindFunction(benchmark::State &state) {
Minus minus;
BindCalculatorClient client0(std::bind(&Minus::calculate, minus, std::placeholders::_1, std::placeholders::_2));
Plus plus;
BindCalculatorClient client1(std::bind(&Plus::calculate, plus, std::placeholders::_1, std::placeholders::_2));
for (auto _ : state) {
client0.calculate(1, 2);
client1.calculate(1, 2);
}
}
BENCHMARK(BM_TestVirtualFunction)->Iterations(100000000);
BENCHMARK(BM_TestBindFunction)->Iterations(100000000);
BENCHMARK_MAIN();

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
INSTR函数与LIKE %%对比测试
在oracle中采用instr代替like前匹配模糊查询的性能测试对比
oracle instr like 优化 -
虚函数与纯虚函数的区别
虚函数(impure virtual) C++的虚
class c++ 函数 虚函数 纯虚函数 -
C++虚函数与纯虚函数用法与区别
.C++虚函数与纯虚函数用法与区别,.虚函数和纯虚函数可以定义在同一个类(class)中,含有纯虚函数的类被称为抽象类(abstract class)
c++ class function 虚函数 纯虚函数