2012-04-15 100 views
3

我有一些困難,重載轉換爲指向函數運算符類的指針。在代碼中,我要的是這樣的:重載類型轉換運算符,投射到函數指針

typedef int(*funcptrtype)(int); 

struct castable { 
    operator funcptrtype() {return NULL;} 
}; 

,但我希望能夠做到這一點,而不使用typedef。如果你很好奇,我需要這個,因爲預C++模板11別名不可用(所以typedef訣竅是不是在模板上下文選項...)

我通常會想到這個工作:

operator int(*)(int)() {return NULL;} 

但它沒有。編譯器(G ++ 4.6.1)說:

error: ‘<invalid operator>’ declared as function returning a function 

這工作:

int (* operator()())(int){return 0;} 

但是你實際上超載operator()返回一個函數指針:)

的標準說:

conversion-type-id不應代表函數類型,也不應代表 數組類型

但它沒有說函數指針類型(第一個代碼snipplet無論如何...)。

有沒有人知道正確的語法w/o typedef

+0

http://stackoverflow.com/questions/6755673/c-conversion-operator-for-converting-to-function-pointer – 2012-04-15 21:45:43

+0

@LuchianGrigore:你應該投關閉作爲一個完全重複的(而不是僅僅添加鏈接作爲一個評論,而另一方面要比做不到:)) – 2012-04-15 21:49:31

+0

@DavidRodríguez-dribeas我沒有投票,因爲我不知道如果這是一個*確切*重複。 – 2012-04-15 21:52:19

回答

3

語法不允許這樣的:在一個轉換操作符聲明的類型是類型說明符,而不是一個型-ID。你必須使用typedef或別名;在模板下,使用通常的更換:

template<typename T> 
struct something { 
    typedef T (*type)(int); 
}; 
+0

謝謝,但這個問題是事實上,參數類型T不能再被扣除。 – enobayram 2012-04-15 22:20:47