我的原始代码如下:
class a{
...
char buff[10];
}
我试图对代码进行此更改:
template <int N = 10>
class a{
...
char buff[N];
}
我能做些什么来保持现有代码创建类的实例a:
a test;
而不是更改为:
a<> test;
获取默认参数?
答案 0 :(得分:7)
您不能在没有尖括号的情况下实例化模板,也不能为类型指定与模板相同的名称,因此您无法完全按照自己的意愿行事。
您可以为模板指定一个不同的名称,并将type a
设置为默认大小。
答案 1 :(得分:1)
好吧,不要让班级成为模板是明显的答案 - 使用类似的东西:
class a {
public:
a( int n = 10 ) : buff(n) {}
private:
std::vector <char> buff;
};
答案 2 :(得分:1)
不是很好的方式。您可以将自定义X设置为X&lt;&gt; 在不同的命名空间:
namespace lib {
template<int N=10>
struct X
{
int t[N];
};
}
typedef lib::X<> X;
int main()
{
X a;
lib::X<20> b;
}
- 或 -
template<int N=10>
struct X
{
int t[N];
};
int main()
{
typedef X<> X; // functions have their own namespace!
X a;
::X<20> b;
}
答案 3 :(得分:-1)
不。空角括号是必需的。