我正在尝试实例化一个外部模板但是我想在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
答案 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)
使用constexpr
或typedef
作为您的共同价值。然后,您只需更改一次公共值,所有显式实例化都将更改。
这是你能做的最好的事情。您不能使用tyepdef
名称进行显式实例化。