我想知道是否允许以下内容:
template < class C >
void function(C&);
void function() {
class {} local;
function(local);
}
感谢
答案 0 :(得分:6)
现在不允许这样做。但它在C ++ 0x中得到支持。目前的标准是14.3.1/2
本地类型,没有链接的类型,未命名的类型或从这些类型中复合的类型不得用作模板类型参数的模板参数。
那就是说,如果函数也是本地的,那就没问题了
void f() {
class L {} local;
struct C {
static void function(L &l) {
// ...
}
};
C::function(local);
}
答案 1 :(得分:0)
如果使用多态而不是模板,则允许使用。或者,如果您不需要扩展function
看到的界面,那么简单继承就可以。
void function( ABC & );
void function() {
class special : public ABC {
virtual void moof() {}
} local;
function(local);
}