我正在做一些元编程,现在我需要测试给定类型的成员函数是否可以用给定的参数集调用,所以我正在做类似下面的事情(通过删除所有内容大大简化了当然对于这个特定问题并不重要):
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
以防万一,什么是可能的,什么不是。
最佳答案
...
unpack "operator"可以放在表达式之外,在这种情况下表达式被展开。
因此,我认为解决方案是 (*static_cast<Args*>(0))...
.
编辑:按照 R. Martinho Fernandes 的提示
typedef decltype(std::declval<base>().my_member(std::declval<Args>()...)) type;
关于c++ - 从 C++11 模板参数包创建空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7902156/