1

对于我的程序,我需要定义一个可以解决问题或嵌套问题的Solver类。

template< typename ProblemT >
struct Solver {
    static void a() {
        ProblemT::func();
    }
};

template< typename < typename SubT> ProblemT >
struct Solver<ProblemT< SubT> > {
    static void a() {
        ProblemT::func();
        SubT::func();
    }
};

用法:

Solver<Problem1> solver;
Solver<Problem2<Problem3> > nested_solver;

Solver的专用版本中,我需要知道ProblemTSubT类型,以便正确定义类型并调用正确的函数。

是否只是一个简单的错误或无法定义这样的类?

4

2 回答 2

5

您可以使用模板模板参数执行此操作:

template<template <typename> class ProblemT, typename SubT>
struct Solver<ProblemT<SubT>>
{
    ...
};

// And you use it like this
Solver<ProblemTemplate<SubProblem>> solver;
于 2012-07-30T13:34:09.767 回答
3

你可以尝试这样的事情:

template <typename T>
struct Solver
{
    static void solve() { T::func(); }
};

template <template <typename> class Tmpl, typename U>
struct Solver<Tmpl<U>>
{
    static void solve() { Tmpl<U>::solve(); }
};

Solver显然,您可以使用可以在专业化等中访问的其他成员函数来装饰您的主模板。

于 2012-07-30T13:50:23.183 回答