错误C3860:模板参数列表

时间:2016-09-01 14:02:15

标签: c++

在我的项目中,我设计了两个模板类:

template <size_t n>
LiePoly
{...};

和...

template <class T, class S, size_t n>
Expression
{...};
// The implementation is not important.

在我的项目中,我想使用以下类:

template<size_t n>
Expression<LiePoly<n>,int,n>

(&#34; Expression&#34;类是模板类的原因是因为我有另一种用途)

因此我的问题是,我如何组合这两个模板类?我的意思是,我想创建一个使用两者的第三个模板类。

例如,以下定义明确:

Expression<LiePoly<7>, int ,7> exp();

感谢您的帮助!

希望我足够清楚。

以下是创建错误的函数的示例(这不是唯一的,但我认为它代表了)

template<size_t n>
void Expression<LiePoly<n>, Symbol,n>::print() const // Here is the error
// "Symbol" is a well defined class
{
    int size = factorial(n - 1) + 1;
    for (int i = 0; i < size; i++)
    {
        if (!N[i]) // N is a member vector of length "size" of integers
            continue;
        if (!C[i].val) // C is a member vector of length "size" of Symbols
        {
            if (N[i] != 1)
                cout << N[i] << "*";
            C[i].print();
            cout << "*";
        }
        else
        {
            cout << N[i] * C[i].val << "*";
        // template<size_t n>
        // Expression<int, Symbol,n> operator * (int k, const Symbol& c)
        // This operator hasn't thrown any error 
        // (maybe this function does because of this...)
        }
        cout << "p_" << V[i].currentNum; 
        // V is a member vector of length "size" of LiePoly<n>
        if (i < size-1 && N[i + 1])
            cout << " + ";
    }
}

这是一个打印功能,我认为它唯一的问题在于模板。 (因为在我使用一个常量整数之前,我使用的是一个常量整数,而我现在正试图推广代码)。

问题出在函数的标题中,编译器无法识别模板类。 Expression<LiePoly<n>,int,n>,因此会抛出错误C3860。

(如果需要 - 我可以发送相关文件)

我的问题有点笼统:

让我们假设我们有以下类

template<class T>
class A

template<class S>
class B

我想定义以下模板

template<class R>
B<A<R>>

我该如何正确地做到这一点?

0 个答案:

没有答案