2011-10-26 20 views
3

我正在做一些元编程,现在我需要测试一个给定类型的成员函数是否可以用一组给定的参数调用,所以我正在做一些事情像下面(这在很大程度上受到去除家居当然,这方面的问题并不重要简化):从C++ 11模板参数包创建空指针

template<typename T, typename... Args> 
struct argument_tester { 
    struct base: public T { 
     using T::my_member; 
     no my_member(...){} 
    }; 
    typedef decltype(static_cast<base*>(0)->my_member(*static_cast<Args*...>(0))) type; 
    //verify return type 
}; 

当然它不与*static_cast<Args*...>(0)工作,所以我的问题是,是否有什么办法才能解参数包作为解引用的空指针,或者如果这是我必须专门为每个参数数量的情况。当然,如果有什么方法可以做到这一点?我在使用gcc 4.6以防万一什么是可能的,什么不可以。

+4

你知道'的std :: declval'的? –

+0

@R。 Martinho Fernandes:我没有,但是这会对这种情况产生什么影响 – Grizzly

+0

我认为在这段代码中存在一个错误,'base'没有使用,我认为它是用来代替'T 'in'static_cast (0)'。 –

回答

8

解压缩“运算符”的...可以放在表达式之外,在这种情况下表达式被展开。

因此,我认为解决方案是​​。

编辑:继R.费尔南德斯Martinho提示

typedef decltype(std::declval<base>().my_member(std::declval<Args>()...)) type;