2010-07-08 83 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