我正在为一些基准代码编写包装器,并希望为已经模板化的函数中的每个模板化类类型执行相同的代码。

有基准类:

template<class T>
class Benchmark : public Interface, public T {
   virtual void Execute();
}

作为T类,我想使用一种基本上仅用于初始化类变量的类型,例如
template<class S>
struct GenericBench {
    GenericBench();
    S var1, var2, var3;
};

现在的问题:对于这种类继承构造,是否有可能为GenericBench的每个突变定义一个专门的函数Exec​​ute?
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();
}

09-27 04:40