无论如何都要为类创建非类型模板参数但不使用<>?声明

时间:2010-07-30 14:57:55

标签: c++

我的原始代码如下:

class a{
...
char buff[10];
}

我试图对代码进行此更改:

template <int N = 10>
class a{
...
char buff[N];
}

我能做些什么来保持现有代码创建类的实例a:

a test;

而不是更改为:

a<> test;

获取默认参数?

4 个答案:

答案 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)

不。空角括号是必需的。