2010-07-08 88 views
6

如何確定成員泛型函數的返回類型?C++模板確定函數返回類型

template<class E> 
    struct result<E> { 
     // E has member function data(), I need to know its return type 
     typedef typename &E::data type; 
    }; 

是否有可能以通用的方式做到這一點? 我知道有boost:: result_of但我的目的它缺乏專業化(如果我理解正確,返回類型必須專門化)。 助推實施會很好。

+2

也許,你根本不需要那種魔法。嘗試使用'E :: value_type *'或'E :: pointer'。如果它有'data()'它可能是一個容器並提供公共typedef。 – 2010-07-08 18:55:20

+0

@Johannes謝謝你。實際上是在試圖寫包裝來透明地與ublas和其他東西合作。不幸的是,ublas data()接口有點不標準(array_type),所以我最終分開進行了專門化。 – Anycorn 2010-07-08 20:14:27

回答

4

GCC的非標準typeof運營商可以這樣做,如Boost.TypeOf

+0

似乎工作,只要沒有重載功能。 你知道如何處理有2個函數的情況(一個有const限定符) – Anycorn 2010-07-08 17:48:03

+0

在使用函數之前,你需要將函數轉換爲const或非const類型。你用boost :: bind得到同樣的問題。 – bradgonesurfing 2010-07-08 17:52:53

+0

@brad謝謝。我不知道類型轉換之前的返回類型嗎? 你能舉個例子嗎? – Anycorn 2010-07-08 17:55:21

3

如果您使用VS2010或GCC 4.3,至少可以使用C++ 0x新關鍵字decltype