std :: tuple中的Void类型

Cha*_*l72 17 c++ tuples c++11

显然,你不能void在格式良好的程序中有一个类型的实例,所以类似下面的声明就不会编译:

std::tuple<void, double, int> tup;
Run Code Online (Sandbox Code Playgroud)

但是,只要我们严格处理类型而不是对象,似乎没有问题.例如,我的编译器(GCC)让我说:

typedef std::tuple<void, double, int> tuple_type;
Run Code Online (Sandbox Code Playgroud)

这对我来说很有意思,因为看起来使用C++ 0x我们可以用它std::tuple来执行许多早期需要boost::mpl库的元编程技巧.例如,我们可以使用std::tuple创建类型的向量.

例如,假设我们要创建表示函数签名的类型向量:

我们可以说:

template <class R, class... Args>
struct get_function_signature;

template <class R, class... Args>
struct get_function_signature<R(*)(Args...)>
{
    typedef std::tuple<R, Args...> type;
};
Run Code Online (Sandbox Code Playgroud)

这似乎有效,即使函数签名具有void类型,只要我们从未实际实例化实例get_function_signature<F>::type.

但是,C++ 0x对我来说仍然是新手,当然所有实现仍然有点实验性,所以我对此有点不安.我们真的可以std::tuple用作元编程的类型向量吗?

Cas*_*Cow 10

你确实可以做到这一点

typedef std::tuple<void, double, int > tuple_type;

只要您只将它用作要使用的类型列表tuple_element.因此,我可以做到

tuple_element<0,tuple_type>::type * param;

这将宣告param为 void*