c++ - 从 C++11 模板参数包创建空指针

标签 c++ templates metaprogramming 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以防万一,什么是可能的,什么不是。

最佳答案

... 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/

相关文章:

c++ - C++ 中的对象字面量替代方案

c++ - 基本数据对齐问题

c++ - 有什么理由不使用全局 lambda 表达式?

java - 配置 Velocity 以读取类路径之外的模板文件

c++ - libstdc++ 和 libc++ 之间的另一个 istream 差异

sql - 使用 Azure ARM 模板导入数据库

c++ - 关于在 C++ 中使用模板特征来选择数据类型

python - 如何将参数从 Python 3.x 中的类定义传递给元类?

c++ - 需要元编程魔术来以无错误的方式定义位字段的母矿脉

ruby - 将实例变量添加到 Ruby 中的类