假设我有类型A
,B
有构造函数A(int a, double b, std::string c)
,B(double a, int b)
.
我知道如何定义一个实例化A
或B
通过可变参数模板的函数.
有没有办法设计一个函数/宏/类型,对于一个类型T
和一系列T
构造函数参数的可能性向量,它为我提供了所有可能的对象?
例如,如果我使用这个神奇的构造,<A, {2, 5, 6}, {2.44, 3.14}, {"yes", "no"}>
它应该提供对象:
A(2, 2.44, "yes")
A(2, 2.44, "no")
A(2, 3.14, "yes")
...
A(6, 3.14, "no")
Run Code Online (Sandbox Code Playgroud)
这同样适用于B
任何其他类型,而不必重新设计魔法结构.
例如,这在Python中非常简单,但我不知道它是否可以在C++中使用.
我开始比较:
但后来我注意到即使在push_back()
deque上似乎也更快.我必须做一些错误的,我不能相信一个更一般的容器也不太可能超过一个特定的一个.
我使用谷歌基准测试的代码:
#include "benchmark/benchmark.h"
#include <deque>
#include <vector>
#define NUM_INS 1000
static void BM_InsertVector(benchmark::State& state) {
std::vector<int> v;
v.reserve(NUM_INS);
while (state.KeepRunning()) {
state.PauseTiming();
v.clear();
state.ResumeTiming();
for (size_t i = 0; i < NUM_INS; i++)
v.push_back(i);
}
}
BENCHMARK(BM_InsertVector);
static void BM_InsertDeque(benchmark::State& state) {
std::deque<int> v;
while (state.KeepRunning()) {
state.PauseTiming();
v.clear();
state.ResumeTiming();
for (size_t i = 0; i < NUM_INS; i++)
v.push_back(i);
}
}
BENCHMARK(BM_InsertDeque);
BENCHMARK_MAIN();
Run Code Online (Sandbox Code Playgroud)
结果:
Run on (1 X 2592 MHz …
Run Code Online (Sandbox Code Playgroud)