我正在进行一些元编程,现在我需要测试一个给定类型的成员函数是否可以使用给定的参数集来调用,所以我做了类似下面的事情(通过删除所有内容大大简化了当然对这个特殊问题并不重要):
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
,以防有可能和有什么不同。
答案 0 :(得分:8)
...
unpack“operator”可以放在表达式之外,在这种情况下表达式会被扩展。
因此,我认为解决方案是(*static_cast<Args*>(0))...
。
编辑:遵循R. Martinho Fernandes的提示
typedef decltype(std::declval<base>().my_member(std::declval<Args>()...)) type;