我正在为一些基准代码编写包装器,并希望为已经模板化的函数中的每个模板化类类型执行相同的代码。
有基准类:
template<class T>
class Benchmark : public Interface, public T {
virtual void Execute();
}
作为T类,我想使用一种基本上仅用于初始化类变量的类型,例如
template<class S>
struct GenericBench {
GenericBench();
S var1, var2, var3;
};
现在的问题:对于这种类继承构造,是否有可能为GenericBench的每个突变定义一个专门的函数Execute?
template<>
void Benchmark<GenericBench>::Execute() {
// my benchmark code
}
主 call 将如下所示:
myBench->Execute<GenericBench<int>>();
最佳答案
以下代码在g++中编译和链接
struct Interface { };
template<class T>
class Benchmark: public Interface, public T {
public:
virtual ~Benchmark() { }
virtual void Execute();
};
template<class S>
struct GenericBench {
GenericBench() { }
S var1, var2, var3;
};
// Specialization of the class
template<class S>
class Benchmark<GenericBench<S> >: public Interface, public GenericBench<S> {
public:
virtual ~Benchmark() { }
virtual void Execute() {
// do things
}
};
int main(int argc, char **argv) {
Benchmark<GenericBench<int> > myBench;
myBench.Execute();
}