2011-12-20 98 views
4

我想实例化一个模板externaly但是我想o在实例化子句中使用typedef。我认为例子说,超过一千字:C++ extern模板实例化和typedef(gcc)

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>代替,但是我认为这很丑陋,因为我需要在三个地方而不是一个地方调整我的共同价值。

那么我该如何把这个,在extern声明/实例化中使用typedef?

我对Ubunutu

+1

所以你的问题是...你认为C++语法是丑陋的?告诉我们一些我们不知道的东西... – 2011-12-20 00:46:08

+0

不要喂巨魔... 好吧,我认为它是非常好/功能,但我想知道我不能从typedefs实例化,多数民众赞成在所有。 – ted 2011-12-20 01:31:22

回答

7

的typedef名尤斯GCC 4.6.1不能在显式实例使用。

从14.7.2/3

如果显式实例为类或成员的类,所述 阐述型说明符在声明应包括一个 简单模板-id。如果显式实例化一个函数或 成员函数,在声明中unqualifiedid应是 一个模板id或者,如果所有的模板参数可以推断,一个 模板名称运营商-function-id。 ...

+1

非常感谢。每次我来到stackoverflow我都惊讶于这里的C++ StandardGurus的数量。 – ted 2011-12-20 01:29:41

2

使用constexprtypedef为您的共同价值。那么你只需要改变一次公共值,所有的显式实例都会改变。

这就是你可以做的最好的。您不允许使用tyepdef名称进行明确的实例化。

+0

+1解决方法 – ted 2011-12-20 01:14:47