在 class 成员函数中将模板 class 作为模板模板参数传递
Passing template class as template template parameter inside class member function
我有一个项目需要用 GCC-4.4.7 和 GCC-4.9.0 编译。
我们使用的代码将模板化的 class 作为 模板模板参数 传递给另一个 class。虽然代码在 GCC-4.9.0 上编译良好,但在 GCC-4.4.7 上却失败了。
这里是错误的重现:
#include <iostream>
using namespace std;
struct E
{
int a;
E(int b) : a(b) {}
};
template<template<int B> class C, int D> struct A
{
void print()
{
E e(D);
cout << e.a << endl;
}
int a;
};
template<int B> struct C
{
const static int a = B;
void print()
{
A<C, B> a;
a.print();
}
};
int main() {
C<3> c;
c.print();
return 0;
}
编译中:
[swarup@localhost ~]$ g++-4.9 Test.cpp -o Test
[swarup@localhost ~]$
[swarup@localhost ~]$ g++-4.4 Test.cpp -o Test
Test.cpp:43: error: type/value mismatch at argument 1 in template parameter list for ‘template<template<int B> class C, int D> struct A’
Test.cpp:43: error: expected a class template, got ‘C<B>’
Test.cpp:43: error: invalid type in declaration before ‘;’ token
Test.cpp:44: error: request for member ‘print’ in ‘a’, which is of non-class type ‘int’
如何纠正错误并正确地使用 GCC-4.4.7 进行编译?
注意:仅C++98标准,代码非常古老。
C
的名称查找找到注入的 class 名称,而您使用的旧编译器不支持将其用作模板名称。
限定名称。
A< ::C,B> a;
我有一个项目需要用 GCC-4.4.7 和 GCC-4.9.0 编译。
我们使用的代码将模板化的 class 作为 模板模板参数 传递给另一个 class。虽然代码在 GCC-4.9.0 上编译良好,但在 GCC-4.4.7 上却失败了。
这里是错误的重现:
#include <iostream>
using namespace std;
struct E
{
int a;
E(int b) : a(b) {}
};
template<template<int B> class C, int D> struct A
{
void print()
{
E e(D);
cout << e.a << endl;
}
int a;
};
template<int B> struct C
{
const static int a = B;
void print()
{
A<C, B> a;
a.print();
}
};
int main() {
C<3> c;
c.print();
return 0;
}
编译中:
[swarup@localhost ~]$ g++-4.9 Test.cpp -o Test
[swarup@localhost ~]$
[swarup@localhost ~]$ g++-4.4 Test.cpp -o Test
Test.cpp:43: error: type/value mismatch at argument 1 in template parameter list for ‘template<template<int B> class C, int D> struct A’
Test.cpp:43: error: expected a class template, got ‘C<B>’
Test.cpp:43: error: invalid type in declaration before ‘;’ token
Test.cpp:44: error: request for member ‘print’ in ‘a’, which is of non-class type ‘int’
如何纠正错误并正确地使用 GCC-4.4.7 进行编译?
注意:仅C++98标准,代码非常古老。
C
的名称查找找到注入的 class 名称,而您使用的旧编译器不支持将其用作模板名称。
限定名称。
A< ::C,B> a;