簡體   English   中英

使用具有作用於函數內部的匿名類的模板

[英]Using templates with anonymous classes scoped inside a function

假設我有以下代碼段:

template <class T> void f(T arg) { arg(); }

void g()
{
   struct { void operator()(void) { } } foo;

   f(foo);
}

Visual C ++接受這個。 但是,當我嘗試GCC時,我得到:

$ g++ --version # just in case this matters
g++ (Debian 4.4.5-8) 4.4.5
...
$ g++ foo.cc
foo.cc: In function 'void g()':
foo.cc:7: error: no matching function for call to 'f(g()::<anonymous struct>&)'

foo全局范圍並且其類型具有名稱時,這是有效的。 declared inside g() it does not. 但是當類型是匿名的g()聲明時,它不會。

GCC為什么拒絕這個? 它是有效的C ++嗎?

14.3.1第2段:

本地類型,沒有鏈接的類型,未命名的類型或從這些類型中的任何類型復合的類型不應用作模板類型參數的模板參數。

換句話說,無效。 雖然它會很方便,但這可能是VC允許它的原因。

如前所述,本地類(函數中定義的類)不能用作模板參數。 幸運的是,C ++ 0x修復了lambda函數: http//en.wikipedia.org/wiki/C%2B%2B0x#Lambda_functions_and_expressions

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM