在我的项目中,我设计了两个模板类:
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>>
我该如何正确地做到这一点?