c ++ extern模板实例化和typedef(gcc)

时间:2011-12-20 00:41:54

标签: c++ templates c++11 typedef

我正在尝试实例化一个外部模板但是我想在instantiation子句中使用typedef。我认为这个例子说的不止一千个字:

typedef myTemplate_base<commonValue> myTemplate; //in 99% of the cases I use this so I want a shorthand
extern template class myTemplate; //wont work/compiler error class infront of typedef

如果我尝试实际模拟这样的模板,我会得到同样的错误:

template class myTemplate;

我知道我可以写(extern) template class myTemplate_base<commonValue>,但我认为这更加丑陋,因为我需要在3个地方调整我的共同价值,而不是一个。

那么我该怎么做呢,在extern声明/实例化中使用typedef?

我在Ubunutu上使用gcc 4.6.1

2 个答案:

答案 0 :(得分:8)

typedef-name 不能在显式实例化中使用。

从14.7.2 / 3

  

如果显式实例化是针对类或成员类的,那么   声明中的 elaborated-type-specifier 应包括a   简单模板id 。如果显式实例化是针对函数或   成员函数,声明中的 unqualifiedid 应为   a template-id 或者,可以推导出所有模板参数,a    template-name operator-function-id 。 ...

答案 1 :(得分:2)

使用constexprtypedef作为您的共同价值。然后,您只需更改一次公共值,所有显式实例化都将更改。

这是你能做的最好的事情。您不能使用tyepdef名称进行显式实例化。